X

ふらっと C#,C♯,C#(初心者用) Part157

■ このスレッドは過去ログ倉庫に格納されています
2022/11/25(金) 13:16:08.91ID:HZEumDr50
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を3行冒頭に書くこと(1行分は消えて表示されない為、もう1行は予備)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part156
https://mevius.5ch.net/test/read.cgi/tech/1663479569/
■関連スレ
C#, C♯, C#相談室 Part96
https://mevius.5ch.net/test/read.cgi/tech/1639965805/
■コードを貼る場合は↓を使いましょう。
https://ideone.com/
https://dotnetfiddle.net/
■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries/
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries/
https://referencesource.microsoft.com/
https://source.dot.net/
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2023/01/25(水) 15:01:44.79ID:UaGoD80Hp
8086系は相対ジャンプや相対コールが無かったから
プログラム実行前にアドレス解決しなきゃならないとか
色々前処理が必要だったんだ
その延長で前処理に色々やらせる処理を追加してるなんて
普通にやっているんだよなぁ
337デフォルトの名無しさん (ワッチョイ cfbb-loBM)
垢版 |
2023/01/25(水) 15:09:07.39ID:YO+oGQTm0
C#が関係なくなっちゃうけど、主要Linux系OSは同じような仕組みで他のCPU用の実行ファイルとかまで動いちゃう
2023/01/25(水) 16:41:58.38ID:SH9Oxo2M0
VC# datagridviewにて
CurrentCellChangedイベントで選択セルの結果を取得したいと思いました。
(rowfilterなどで変化した場合もとりたいため、clickイベントにしませんでした)

しかし、DBから読み込んだ時点ですぐ発生するイベントにて
System.NullReferenceExceptionがでます。

CurrentCell.Value == null で判断できるのかと思いましたが違うようでした。
データがなかったときに何もしないというコードはどう書くべきなのでしょうか。

今までPHPで簡単なものを作っておりましたが、
コントロールプロパティやイベントが何を返してて、
どう対処するのかが基礎的なものがわかりません。
nullが返ってくるんだから if nullじゃないの?というのが間違ってる...のでしょうか?

https://ideone.com/J0iDmr
2023/01/25(水) 17:00:33.96ID:VgR3j9B70
>>335
あーこれは本当に素晴らしい記事でした。ありがとうございました。
windowsローダーとかPEフォーマットとかまーったく知らなかったですね。機械語の塊の実行ファイルをOSが読んでいくくらいにしか思ってませんでした。これやっぱ常識なんですかね。
C#の本読んでも当たり前のようにCLRとか出てきてよくわかんねぇとかなってましたけどこれが前提知識ならそりゃ分からんわってなりました。
2023/01/25(水) 17:49:01.17ID:+bDum9h60
>>338
他のクラスでも同じだがCurrentCell.Value == nullの前にCurrentCell== nullを判定しないとnullに属するメンバを指定したら存在するはずがないのでエラーになる
if (dgv.CurrentCell== null || dgv.CurrentCell.Value == null)
{
return;
}
2023/01/25(水) 17:56:26.24ID:Q2YcVXM80
>>338
VSでデバッグ実行したら、例外が出たときにそこで止まって発生した行が表示されるよね
そこでローカルウィンドウとかでどの変数に何が格納されているか確認するといいよ
2023/01/25(水) 17:59:52.43ID:SH9Oxo2M0
>>340
ありがとうございます!!

>DataGridView.CurrentCell.get が null を返しました

おかげさまでようやく
このエラーメッセージが何を言いたいのか理解できました。
2023/01/25(水) 18:01:47.91ID:E6MdhQPL0
.NET Frameworkランタイム入れていない
古いWindowsで開くと形式がおかしいとか言われたはず
2023/01/25(水) 18:03:19.22ID:SH9Oxo2M0
>>341
ありがとうございます!!

いま改めて見たら
dgv.CurrentCellがnull であって
dgv.CurrentCell.value ではなかったです。

この違いにまったく気づいてなく
頭をかかえていました。
2023/01/25(水) 22:33:14.66ID:VgR3j9B70
datagridviewは本当に色々とめんどくさいよね
起きるイベントの順番とかタイミングとかカオスでバグが出まくる
346デフォルトの名無しさん (スッップ Sd1f-RQPf)
垢版 |
2023/01/26(木) 01:02:50.84ID:41WP6aJtd
>>345
お前が馬鹿なだけ
2023/01/26(木) 22:49:39.84ID:lq03KzKz0
多分なんちゃらview全般に言えるのでは
2023/01/27(金) 17:54:28.03ID:taOXdrfWM
別に変なことしたくねーのに
変なことしたいでしょ?
って前提で作られててな
微妙なイベントの順番をハンドリングしないと普通のことも
できないのは正直クソだと思う
2023/01/28(土) 13:20:46.28ID:I9B5TSew0
シンプルなテーブルを作るにあたりDataGridViewとListViewどっち使うか毎度悩む
そしてこいつらは行や列の結合セルを作れない事に気付いてTableLayoutPanelに移行しようとするもこっちはこっちでデータとのバインディングが面倒で断念
最終的にはただのControlクラスを継承したまっさらな白紙にOnPaintで自力描画する事に落ち着くのである
350デフォルトの名無しさん (ワッチョイ 8754-QtSo)
垢版 |
2023/01/28(土) 14:52:36.43ID:iXjFLTNM0
null 許容参照型について教えて下さい。

class Person
{
// null 非許容だと警告が表示されるので、null 許容にしています。
public string? Name { get; set; }
}

上記のケースで、null 非許容のまま警告を回避する為に、プロパティ宣言時に、下記のようにしようと考えています。
public string Name { get; set; } = string.Empty;
ただ、Name プロパティを参照する時に求める要件は「null でない事」ではなく「人名が代入されている事」なので、
string.Empty で null 警告を回避しても、string.Empty は人名ではない為、意味がありません。

この場合、Name を参照する側では、
if ( person.Name != null )
をチェックするか
if ( person.Name != string.Empty )
をチェックするかが変わるだけで、null 許容参照型にするメリットを感じないのですが、メリットはあるのでしょうか?
2023/01/28(土) 15:02:12.75ID:acHVjvs20
ケースによるが、コンストラクタを用意して

public Person(string name)
{
Name=name;
}
2023/01/28(土) 15:03:19.66ID:acHVjvs20
とやって、全てのオブジェクトには名前があるように保証できるようにするのが俺のやり方だわ
2023/01/28(土) 16:32:58.07ID:SSo2rJoBd
>>349
結合セルもできないのか
そういうの考えるともう枯れたHTMLで画面作る方が楽だなーって思う
2023/01/28(土) 16:37:13.72ID:qgiHv5Wf0
>>350
空文字は許容されてなくてnull関連の演算子も使わないならどっちでもいいんじゃね
2023/01/28(土) 18:21:00.62ID:DKSWYQK4a
>>350
null許容の場合は空文字とnull両方を考慮しないといけないだろう
356デフォルトの名無しさん (アウアウウー Sa47-lxhl)
垢版 |
2023/01/29(日) 06:55:37.48ID:Tvr/A6EZa
>>349
WPFでやれば楽よ
2023/01/29(日) 10:10:30.46ID:Bt1+Pj/S0
>>349
個人開発なら構わんが、会社でそういう糞コントロール作るなよ
保守するのが面倒くさい
2023/01/29(日) 10:26:49.48ID:tvJJpmA20
>>349
最近気づいたけど
セルの変更しないなら
いっそピクチャーボックスもあり
スクロール制御しないと駄目だけど
2023/01/29(日) 11:24:21.80ID:1KUwXnGJ0
大昔からString.IsNullOrWhiteSpaceでチェックしていたから気にしたことなかったわ
2023/01/30(月) 22:17:23.47ID:4W3kbClF0
JsonSerializerでdynamic型の配列に異なる型のオブジェクトを混在させたのもをSerializeしてからDeserializeするときに型を復元するにはどうすればよいでしょうか。
2023/01/30(月) 22:26:24.35ID:rXBejGf/a
キャスト
2023/01/30(月) 23:02:54.21ID:4W3kbClF0
キャストする型が不定なので保持しておきたいのですがそのような機能はないでしょうか。
参照関係はメタデータとして保持できるのですが…

なければ独自で型情報を保持するしかないと思うのですが、List<Hoge>のような型が存在する場合にGetType().Nameを読み取ってもList`1のような謎の文字列になってしまい…
2023/01/30(月) 23:08:33.77ID:oFd10dGn0
普通はtypeofとかisとか使うんじゃね?
2023/01/30(月) 23:10:20.10ID:oFd10dGn0
object型で何で扱って、typeofとかisとか使ってマッチさせるんじゃねえの?
2023/01/30(月) 23:12:24.68ID:4W3kbClF0
全てのパターンの型でマッチするものを探すようなコードを実装するということでしょうか。
汎用的なものは難しいですかね
2023/01/30(月) 23:33:12.81ID:EKczJlFVa
jsonに型情報なんか入ってないからプログラマが型を教えてやるしかねーぞ
入れられるならプロパティとして入れとけ
2023/01/30(月) 23:41:03.69ID:4W3kbClF0
うーむ…中々難しいのですね。
辞書に色々ごちゃごちゃにぶち込んで一発でシリアル化、一発で逆シリアル化とはいかないですか。
2023/01/30(月) 23:50:54.82ID:EKczJlFVa
プロがやれば何とかなると思うから依頼してみなよ
さすがに詳しいことをここで聞いたり説明したりするのはめんどいわ
2023/01/30(月) 23:52:57.23ID:4W3kbClF0
確かになんとかはなるかもしれませんね…
簡単にはいかないのは確か、というところでしょうか。
JsonSerializerが参照情報だけではなく型情報もメタデータとして保持できればよかったのですがね。
2023/01/30(月) 23:58:17.04ID:IhW3z+yo0
>>367
TypeNameHandling.All
しかしセキュリティリスクがあるからおススメできない
2023/01/31(火) 09:16:17.88ID:d4xiAPDr0
XMLでよければXmlSerializerがあるがな。
2023/01/31(火) 19:05:24.58ID:t9l1A9G+0
jsonのと比べてXmlSerializerだと何か良いことがあるのかね
2023/01/31(火) 21:43:56.67ID:d4xiAPDr0
>>372
型情報を含んでる
2023/01/31(火) 21:48:53.87ID:tyybi/5mp
型情報あっても、その型を解釈出来なけりゃ意味が無いからなぁ
送り手と受け手で同じ型宣言つかわにゃ
375デフォルトの名無しさん (アウアウウー Sa47-MG55)
垢版 |
2023/01/31(火) 22:18:53.12ID:eUQUkrMna
おなじ宣言つかえばいいのでは
2023/01/31(火) 22:25:35.04ID:tyybi/5mp
作成者が同じとも限らないし、言語が違うとかもあるし
限定的な使い道しか無いんだよなぁ
2023/01/31(火) 22:37:59.59ID:JUpN+VeK0
何がしたいんだ?
自分も使えないデータを知らない人に渡して活用してもらうのか?
2023/01/31(火) 22:39:07.69ID:lNQXIXaf0
そもそもどういう理由でJSONを選んだのか
シリアライザも色々あるから、それに適さないデータを無理に扱おうとしても苦労するだけよ
2023/02/01(水) 01:00:31.32ID:gXlE0Qft0
用途→状態保存
なぜ→特になし
2023/02/01(水) 04:01:10.47ID:RyGmTTdX0
>>367
辞書に入れる要素のクラス自身をdynamicにするんじゃなくて
そのクラス内のプロパティにdynamicから継承したクラスをズラズラ並べたら?
泥臭いけど、やりたい事は実現できる
2023/02/01(水) 07:07:59.79ID:OQq7+g560
https://learn.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/serialization/

だから他のクラスに読み出す必要性は?
2023/02/01(水) 11:28:10.11ID:BH4poKX+a
Marshal だろ。たいていの言語にある。
でも、言語のバージョンが異なると互換性がない

dRuby みたいな分散・リモートオブジェクト。
送信先で、オブジェクトを復元できる機能

ただし、プロセスID など、各システムで固有のものは送れない・復元できない

例えば、システムA のプロセスID・100 を送っても、
システムB の100に出来ない
2023/02/01(水) 11:59:27.64ID:UTKch+wba
そもそもクラス名を指定すれば復元できるんだからクラスを保存するのは普通
ただのデータ構造
2023/02/01(水) 14:10:05.95ID:ebRzTgdK0
async/awaitが出た頃に「BackGroundWorkerは時代送れだから使うな」
って聞いた気がするけども、ググると新しい記事でも使っています。
用途次第なのでしょうが、BackGroundWorkerも使って良いのでしょうか?
2023/02/01(水) 15:00:43.93ID:v1HsWaA1d
>>384
廃止になる情報は見つからないね
2023/02/01(水) 15:09:07.40ID:Ke8/ro290
古いframeworkのバージョンしか使えない場合とか
2023/02/01(水) 19:04:34.85ID:dDom2t/30
async汚染が気になって使えない
2023/02/01(水) 19:55:41.40ID:maza5pHhp
プロパティに非同期呼び出しがあって詰んだ思い出
2023/02/02(木) 06:15:09.17ID:upKEKEWBa
>>384
性能は同じだから、どっちを使っても良いと思う
2023/02/03(金) 17:52:58.42ID:Dixtr4kT0
win32apiのTextOut関数を使ってコントロールへ文字を表示したいのですが
マウスをドラッグして、そのコントロールを含むフォームのサイズを変更したときに
タイミングによっては例外が発生してしまいます、どのように修正するのが正当なやり方でしょうか?
void MyTextOut(){
TextOut(......)
}

protected override void OnPaint(){
MyTextOut()
}
2023/02/03(金) 21:39:19.06ID:Ug5oxsRH0
まずどんな例外が発生しているのかそういう情報が無いと誰も答えられないような
2023/02/03(金) 21:48:19.59ID:0nuP02J20
そもそも、なんでTextOutなんて使ってんの
2023/02/03(金) 22:00:34.75ID:Ug5oxsRH0
確かにw
DrawString()とかで良さそうな
https://dobon.net/vb/dotnet/graphics/drawstring.html
2023/02/03(金) 22:06:21.54ID:0nuP02J20
C#は、基本設計として危険な生のハンドル操作をする必要がない作りになっている
ろくにエラー処理もしない(出来ない)奴が直接Win32APIを叩くのがそもそも間違ってる
2023/02/03(金) 22:17:15.42ID:j/Zv+95r0
>>390
質問する際は>>391の言う通りどんな例外かを示さないとエスパー呼んでくるしかない
あとせっかくコードを出すのなら再現する最低限のコード書けば答える側もわかりやすいし、最低限のコード作って確認したら自分で解決もしやすい
個人的にはどうでもいいだろうけど、protected overrideなのにbase呼んでないのが気になった
https://learn.microsoft.com/ja-jp/dotnet/desktop/winforms/controls/overriding-the-onpaint-method?view=netframeworkdesktop-4.8
2023/02/04(土) 01:30:11.94ID:Oed2Ku7T0
LINEのc#のオープンチャットがあったので入ってみたらスマホのめちゃくちゃ狭い画面でソース貼ってやりとりしてて笑った
正気か?
2023/02/04(土) 02:31:03.22ID:TaDFHfgY0
授業で習ってますてな感じの学生が使ってるんだろ
LINEの時点でプログラマは一人もいなそう
2023/02/04(土) 07:17:12.90ID:Av2vQos/0
知らんのか
今の若い子はスマホしか知らない世代と言われ開発もスマホでするんだよ
399デフォルトの名無しさん (ワッチョイ 4f5f-F1up)
垢版 |
2023/02/04(土) 18:23:13.70ID:xi2o8ewX0
10インチタブレット+無線キーボードならまぁ…
いやまともなIDEないからやっぱダメだな
2023/02/04(土) 19:28:59.33ID:yf/xw4jH0
いやあむりっす
2023/02/04(土) 19:33:52.48ID:3xAEA7yN0
LINEってWindows版もなかったっけ?
2023/02/04(土) 19:35:24.17ID:9MyJHPNb0
国民的アプリLINE、韓国産!w
2023/02/11(土) 22:26:36.72ID:2er8PNSW0
たまにはテンプレ案の話もしませんか?
とりあえずdocsはlearnに直して情報源に未確認飛行https://ufcpp.net/入れてほしい
2023/02/12(日) 07:58:30.10ID:1e5Tlcow0
.NET6使ってタイマースレッド内で作ったList<ListViewItem> ItemListの中身をスレッドからInvokeで
Invoke(new Action<ListViewItem[]>(MainListView.Items.AddRange), ItemList.ToArray())したのに
何故かParameter count mismatch言われるのがわけわからない……
ListViewItemの配列で引数合っとるやろがい……
2023/02/12(日) 10:12:49.64ID:LIxWC8qE0
(object)ItemList.ToAray()
でどう?
2023/02/12(日) 10:44:51.68ID:1e5Tlcow0
>>405
できた、サンクス
これ、ToArray()で返って来た配列の要素がそのまま可変長引数にばらけて入ってるってことだったんか……
2023/02/12(日) 14:35:35.41ID:O9dtb47zM
>>403
入れなくていいよ
そいつは自己紹介せずにC#でググれ(そしたら自分のサイトが出てくる)と言ってるらしいし
2023/02/12(日) 15:18:30.44ID:O9dtb47zM
それにC#の新機能でググってるのにそいつのサイトのドラフト案のころの情報につながったりする
そして実際の動作とは違ってる

誰が悪いとは言わないが個人の活動に乗っかってるだけだからな
正確に今ある機能を知りたい場合には向かないけどググったらそこにつながってしまう
2023/02/12(日) 15:36:45.09ID:FJkPIAh+r
ドラフト案を新機能として紹介してるなら向こうの手落ちだけども、そうでないならただの言いがかり
それに普段見てる範囲ではこの機能はこのバージョンからって各ページにしっかり書いてある方だと思うけどな
実際問題として初心者の情報源として重要なサイトであるのは間違いないでしょ
2023/02/12(日) 15:44:55.86ID:O9dtb47zM
どこが言いがかりだよ
チャンと日本語を読めよ
2023/02/12(日) 16:13:36.76ID:FJkPIAh+r
新機能で検索してるのにドラフト案の頃の情報がヒットするのはけしからん!ってことじゃないの?
2023/02/13(月) 09:33:35.41ID:lvNaLqRz0
張と日本語を読め?
413デフォルトの名無しさん (ワッチョイ ef54-0W4p)
垢版 |
2023/02/14(火) 05:36:16.67ID:nRH0oIdj0
新しい社内向けアプリ作る為のGUIを何で作るか迷っているのですが、今一番いい選択肢は何なのでしょうか?
個人的な感想としては、下記の状態です。
グラフとかチャートを多用するので、関連ライブラリが多様だとありがたいです。

WinForms = 楽 (一応 System.Windows.Forms.DataVisualization.Charting がある)
BlazorWebView = 少なくともWinFormsと同じくらい楽。むしろCSSとJS使える分だいぶ気楽。
MAUI = 使った感触では「まぁ時間をかけて慣れれば使えるかなぁ」という感じ。
WPF = 触ってもないのに何故かネガティブなイメージが強くて、全く検討していない。
2023/02/14(火) 08:39:42.78ID:Ot0uggwf0
>>412
張さん?
2023/02/14(火) 10:42:53.95ID:DdfzuiCAM
>>413
もう自分で答えでてるんじゃね
作りやすい物で作ればいい
2023/02/14(火) 10:47:02.41ID:DdfzuiCAM
社内で使用する前提だと、どの程度のスキルの奴が何人でつくって誰がメンテしていくかってのが基準になるから、自分が選定する立場ならそのへんで選ぶ
2023/02/14(火) 10:58:11.82ID:yaEcYKtV0
メンバー次第だよなぁ
C#じゃないけど、俺ならelectronにするわ
2023/02/14(火) 12:29:16.94ID:Xi4hjfkka
>>413
Chartが使えるWinformでいいと思う
2023/02/14(火) 18:07:04.64ID:YQfZZ7py0
WPFはコーディングだけでUIかけるから好きだけど、他のもそうなの?
2023/02/14(火) 18:09:57.75ID:pNVFHGjc0
WPFだな
2023/02/14(火) 20:28:46.03ID:/lgiAtc40
>>419
Windows3.1?
誰も望んでない方向へよく行ったと思う
2023/02/14(火) 20:39:14.68ID:4KQ468uNM
>>413
正直なところweb技術で作ったほうがいい
チャートがあると言うだけでもc#で作るのはお勧めしない
JSだとライブラリ選び放題
2023/02/14(火) 21:36:08.31ID:snyjWmK+0
System.Windows.Forms.DataVisualization.Charting使ってC# on powershell on バッチファイルで毎日グラフ吐かせてるけど一番シンプルいいと思う
野良のライブラもコンパイルも何も必要ないのと、やはり1ファイルで済むのがでかいと思ってる
2023/02/14(火) 21:51:39.49ID:4KQ468uNM
井の中の何とやらだろ
格が違いすぎる
2023/02/14(火) 22:14:49.56ID:R/4TdMMUr
君は人に噛み付いてばかりだな
2023/02/14(火) 23:03:10.09ID:4KQ468uNM
c#のチャートは止め絵
jsのチャートはUI有の動画

格が違いすぎる
試してみたほうがいいよ
2023/02/14(火) 23:18:18.45ID:zG3Q3kn70
まずデスクトップアプリかWEBアプリか、どっちが向くかの検討があって
言語はそれから考えるもんだと思うんだがな
2023/02/14(火) 23:21:04.30ID:w4RoV4Lpr
>>426
それより>>408>>410の続きはもういいの?
2023/02/15(水) 05:25:32.89ID:j7LcSp3e0
>>424
C#的に、シャープの中の蛙と言うべきだね。
2023/02/15(水) 08:49:42.39ID:STPisL/80
>>419
むしろコーディングだけでUIが描けないとかあるの?
VisualStudioのフォームデザイナも実体はただのコードだぞ?
2023/02/15(水) 09:46:49.53ID:JWhNqlzMp
>>429
いや、シャープマークはイゲタと言うし、井の中の蛙で合ってるだろ
井って文字すらシャープだね
2023/02/15(水) 11:53:25.33ID:RJgV2C9S0
>>430
実体はどうかと、実際に作成するときにどういう手段を取るかは別の話だと思うよ
2023/02/15(水) 11:55:29.11ID:gTZgWSvMp
意味不明なスクリプト言語を弄るよりは健全だよな?
2023/02/15(水) 12:55:04.29ID:STPisL/80
>>432
それはWPFも同じことだ
2023/02/15(水) 16:59:27.29ID:X4l7Qxg5d
いや、違うでしょ
.Designer.csは手書きする前提ではない
文字列の一括置換とか軽微な修正で直接編集するみたいなことはあるにしても
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況