ふらっと C#,C♯,C#(初心者用) Part145at TECH
ふらっと C#,C♯,C#(初心者用) Part145 - 暇つぶし2ch2:デフォルトの名無しさん
19/10/07 20:48:30.84 mLA0yK1I0.net


3:デフォルトの名無しさん
19/10/07 23:08:42.11 4esZ9KBu0.net
c# windowsフォームにファイルをドラッグ&ドロップしたらファイルのパスを取得みたいなコードはネットにありますし、そのままビルドしたら正常に動作しましたので良いのですが、
ファイルをドラッグした瞬間にパスを取得することは出来ますか?

4:デフォルトの名無しさん
19/10/07 23:10:15.53 WkkYpHG50.net
はい

5:デフォルトの名無しさん
19/10/07 23:12:19.73 QEMDFqtE0.net
うん

6:デフォルトの名無しさん
19/10/07 23:36:38.52 /mGKDAACa.net
>>3
普通にやると一番早く取得できるのはDragEnterやDragOverイベントかな
もしドラッグを始めた瞬間に取得したいのなら
全プロセスに対してOle32.dllのDoDragDrop呼び出しをフックして
プロセス間通信でパスを通知、とすれば出来るのかもしれないけど初心者がすることではなさそう

7:デフォルトの名無しさん
19/10/08 10:56:30.06 2mFIneqB0.net
質問失礼します
textboxに入力を終えて確定したことを知り自動的に
フォーカスをtextboxから別の決まったコントロール(buttonとか)に移動したいのですが
フォーカス移動のコードをどこにどう書いたらいいのか分かりません

8:デフォルトの名無しさん
19/10/08 12:49:06.43 8dDmccAua.net
>>7
ケースバイケースでは?
同じ機能のTextBoxが一つしかなく、他で使いまわす予定もないなら
Formに書けば十分。
複数使いたかったり汎用的で他で使いまわしたいなら
(a) TextBoxを継承してそこに書く
(b) UseControlにTextBoxとButtonをペアで配置してUseControlにフォーカス移動のコードを書く
このいずれか。

9:デフォルトの名無しさん
19/10/08 13:32:25.44 2mFIneqB0.net
>>8
ありがとうございます
なるほど、(a)かなあ
ところでtextboxの入力が確定したことをどうやって取得すればいいのかも分からないんです
それも教えてください、すみません!

10:デフォルトの名無しさん
19/10/08 13:36:59.57 2mFIneqB0.net
あ、それはTextプロパティが変化したかどうかを見ればいいのか?
でもそれじゃイベントハンドラがどうしたらいいのか分からない
Textの変更を始めたというイベントハンドラって取得できるんですかね?

11:デフォルトの名無しさん
19/10/08 13:52:29.59 2mFIneqB0.net
それも駄目か
やっぱり何らかの方法で変更が終了して
リターンを押して確定したことを取得しないといけないよね?

12:デフォルトの名無しさん
19/10/08 14:15:27.36 2mFIneqB0.net
わかった _TextChangedか!
ありがとうございました

13:デフォルトの名無しさん
19/10/08 17:51:14.93 Ibd7T+CL0.net
昔だったらkillforcusなんだけど
c#はなんだろう?

14:デフォルトの名無しさん
19/10/08 17:55:02.19 Ibd7T+CL0.net
あった多分これで検索すれば
c# textbox validated event

15:デフォルトの名無しさん
19/10/09 07:55:59.19 /K0h5hCH0.net
WPFアプリにてタスクバープレビューの右上の閉じるボタンから閉じた時のイベントを取得することは出来ないのでしょうか?
上記の方法で閉じると一見終了されたように見えてもプロセスは残ってしまうため、メインウィンドウの閉じるボタンを押したときに呼ばれる後処理メソッドを呼ばせたいのですが

16:デフォルトの名無しさん
19/10/09 08:46:37.34 zdauYmXS0.net
こっちの環境では普通にClosedイベント発生してるし特殊な終わり方はしてないようだが…

17:デフォルトの名無しさん
19/10/09 08:50:50.65 Y6sBp1G90.net
どういう方法で閉じようと、ClosingやClosedは経由するよな

18:デフォルトの名無しさん
19/10/09 16:30:31.60 31sFMC5w0.net
C# + Oracleで自社内向け業務アプリ作ることになったんだけど、..net coreでなく、net frameworkのWinFormsでいいよね?
ユーザーはせいぜい1200人程度なんだけど、.net coreランタイム入れる手間を考えたくない。
WinFormsって結構大きなデメリットになったりする?

19:デフォルトの名無しさん
19/10/09 16:45:47.71 KnJFPOSX0.net
Formで複数のNumericUpDownを使ってます
値の変化はValueChangedイベントを使用してます
あるNumericUpDownを変化すると別のも連動します
値を変える場合一時的にイベントハンドラを無効にしてます
今は-=で無効にしてますが他にイベントハンドラを無効にする方法はありますか?

20:デフォルトの名無しさん
19/10/09 16:47:28.10 faTZyW/Hd.net
勘違いしてるみたいだけど.NET coreはインストール不要(自己完結型)でビルドできるよ

21:デフォルトの名無しさん
19/10/09 20:11:01.90 bRqP1Lm30.net
CoreってGUI作れるようになったん?

22:デフォルトの名無しさん
19/10/09 20:29:41.44 BQgggoCY0.net
core調べてみたら便利そうだな
調べるうちにだんだんUWPとWPFの違いが分からんようになった
WPFでUWPのコントロール使えるなら、UWPは制限きついだけか?

23:デフォルトの名無しさん
19/10/09 20:36:12.50 mYLA6NTyM.net
Win限定なら作れる
でも現実にはある程度のユーザー数のある業務アプリなら.NET Framework の方が遥かに配布は楽だよ
ClickOnceが使えるからね
.NET CoreはSCDができるのはいいけど、配布や更新に関して良くも悪くも単なるexeができる以上のサポートは何もない
ヘタにzipで配っちゃったら後で地獄を見ることになる

24:デフォルトの名無しさん
19/10/09 20:42:22.99 mYLA6NTyM.net
あと、今から業務アプリを新規に作るんならそもそもクライアントアプリではなくWebにすべきだ
Webなら配布の心配なんか最初から要らないし、.NET開発におけるメインストリームだから情報も豊富だし将来性もある

25:デフォルトの名無しさん
19/10/09 21:05:50.95 DtVKrlfY0.net
>>23
MSIX

26:デフォルトの名無しさん
19/10/10 01:06:13.89 8ioradGx0.net
>>19
フラグ使ってイベントハンドラの入り口でreturn

27:デフォルトの名無しさん
19/10/10 11:00:47.70 EXU1k5cj0.net
質問なんですが
DataGridViewでテーブルを表示させてるんですが、中のデータを変更してもDataGridViewが更新できません
class Person
{
  public int ID;
  public string Name;
}
class PersonList
{
  public List<Person> Data { get; }
  public PersonList()
  {
    new Person { ID = 1, Name = "tanaka" };
    new Person { ID = 2, Name = "kimura" };
  }
}
PersonList personList = new PersonList();
DataGridView1.DataSource = personList.Data;
今は無理やりデータソースを一度Nullにして消して再読み込みしていまうs
private void Button1_Click(object sender, EventArgs e)
{
  DataGridView1.DataSource = null;
  DataGridView1.DataSource = personList.Data;
}
これでは画面が一度消えてちらついたり、セル幅がリセットされたり、いまいちです
DataGridViewの再読み込み再描画でうまい方法あるでしょうか?

28:デフォルトの名無しさん
19/10/10 11:06:31.69 dY7xsk310.net
PersonにはINotifyPropertyChangedを実装して
各プロパティのsetでPropertyChangedイベントを発生させる
要素の追加削除に対応するならList<T>の代わりにBindingList<T>を使う

29:デフォルトの名無しさん
19/10/10 16:37:05.29 EXU1k5cj0.net
>>28
さんくすです
何やらうまくいきそうな感じですが、実際に書くのは難しそうです
少し調べてみます

30:デフォルトの名無しさん
19/10/10 19:37:58.48 +cMNiUZhM.net
ASP.NET(VS2013) でWebアプリを作っています。
データベースから取得したデータをGridViewにBindしています。
特定のカラムを編集したくて OnDataBound イベントにて以下のようにしてTextBoxを追加しました。
foreach (GridViewRow rw in GridView1.Rows)
{
�TextBox txt = new TextBox();
�txt.Text = rw.Cells[2].Text;
�rw.Cells[2].Controls.Add(txt);
}
この後、TextBoxの値を取得したいのですが、
foreach (GridViewRow rw in GridView1.Rows)
{
�TextBox txt = (TextBox)rw.Cells[2].Controls[0];
�xx = txt.Text;
}
ではうまくいきません。Controlsがないようです。
どうすればTextBoxの値を取得できるでしょうか。

31:デフォルトの名無しさん
19/10/10 19:39:53.55 i+8+28k+F.net
・extBox txt = (TextBox)(rw.Cells[2]).Controls[0];

32:デフォルトの名無しさん
19/10/10 20:08:53.90 aBdkLcoOM.net
>>31
>>30です。
ダメです。~.Controls.Countが0なので、インデックスの範囲外になってしまいます。

33:デフォルトの名無しさん
19/10/10 21:29:45.48 kk1CdJ+b0.net
ProcessクラスにはDispose()があるようですが、
var processes = Process.GetProcesses();
とした時点で上記のProcess[]内のProcessたちを全てDispose()しないとメモリリークなどしてしまうのでしょうか?
それとも実際にハンドルなどを参照したものだけDispose()すれば良いのでしょうか?

34:デフォルトの名無しさん
19/10/10 21:39:45.74 afa4sCIxa.net
>>33
URLリンク(referencesource.microsoft.com)
ReferenceSourceを見ると
GetProcessesByName()が内部でGetProcesses()を使っていて、それの戻り値配列に使わない場合はDispose()しているから
GetProcesses()を直接呼び出している場合でも戻り値配列の各ProcessをDispose()したほうが良さそう
GC管理下にあるからDisposeを呼び忘れていても、ファイナライザが呼び出されて少なくともメモリーは回収されるとは思う

35:デフォルトの名無しさん
19/10/10 21:49:47.76 kk1CdJ+b0.net
>>34
ありがとうございます
一応全く使わないProcessもDisposeしておくことにします

36:デフォルトの名無しさん
19/10/10 21:51:48.13 IMCrZqO+0.net
クラスA内にインスタンスメソッドBがあったとして、長くなってしまったから一部をメソッドCとして外に出すとします
このCはBから呼び出される以外どこからも参照されません。本当にちょっと分離するためだけに分けているのです
このときCの修飾子はどうするのがいいのでしょうか。publicは論外として、ただ単にprivateでいいんですかね
staticとかつけた方がいいですか?クラス内で変な使われ方するのを防いだ方がいいかなとか思ったのですが

37:デフォルトの名無しさん
19/10/10 22:11:44.95 IquandTc0.net
そのソースを自分しか触らないのであればprivateでいいと思う
自分で作っているんだから変な使われ方をされることもないだろ?
もし他の開発者が触る可能性があるんならローカル関数を使えばOK

38:デフォルトの名無しさん
19/10/10 22:18:06.84 BXM3vcse0.net
privateにしてコメントに注意書きしておけばいいと思うが
メソッド名の頭にアンダースコアつけるとか
DoSomethingFromBOnly()みたいな名前にしておくとか

39:デフォルトの名無しさん
19/10/10 22:21:13.96 hT7PmE+00.net
全部public
クラスAを継承したクラスA2で
メソッドBをちょっと変えた
メソッドB2を作りたいときに
メソッドCを呼べない欠陥クラス

40:デフォルトの名無しさん
19/10/10 22:26:58.12 PsSxAeUca.net
>>36
普通にprivateにすればOK。
誤用されるリスクは分割したメソッドに固有の問題じゃない。
それは命名と抽象化が不適切ならどのメソッドにも起こりうる。
だから分割したら誤用されるんじゃないか、って発想はかなり変だ。
staticはインスタンスメンバーを使わないなら付けるべきだが、付けたからって
誤用されるリスクが減るわけじゃない。
ローカル関数は、
(1) 分割したメソッドを何度も呼び出す。
(2) その時に必ず同じ変数を引数として渡す(それが冗長に感じる)
こういうケースじゃなきゃ積極的に使う理由はない気がする。

41:デフォルトの名無しさん
19/10/10 23:44:04.64 a+kHg1ZD0.net
メソッドBからしか正常に動作しないメソッドCという構図ならそもそも設計が怪しい
メソッドB以外から使われることがないだろうくらいの感じなら
万一使われても別に困らないしprivateで問題ない

42:デフォルトの名無しさん
19/10/10 23:49:12.95 +/bzkuJ6a.net
ローカル関数を使いたがる奴は総じてレベルが低いね

43:デフォルトの名無しさん
19/10/10 23:51:17.44 mQn3Hgbj0.net
グローバルおじさんが来たな

44:デフォルトの名無しさん
19/10/10 23:56:49.95 hT7PmE+00.net
>>41
は?
>>39のケースで普通に困るだろ
ボケてんかよ

45:デフォルトの名無しさん
19/10/10 23:58:46.54 mQn3Hgbj0.net
>>44
でもまあ拡張性に優れてないのは元からっぽいから、分けて書くことに始まった問題じゃないじゃん?

46:デフォルトの名無しさん
19/10/11 00:18:02.53 f+9us5CU0.net
全部publicおじさんなんかどう見ても荒らしなんだからNGに放り込んどけ

47:デフォルトの名無しさん
19/10/11 00:18:46.89 vfhfRP3v0.net
>>39のケースを解決しようととりあえずprotectedにすればいいと思うだろ?
ところがメソッドB2の処理の途中に
クラスXの処理を絡ませなければならないことになった
しかし、クラスA2はクラスXを呼び出すと循環参照になってしまうためそれができない
なのでクラスEにメソッドB3を作成することになった
ときにメソッドCはprivateでは呼び出すことができない
ここまで解決しようとするとメソッドCはpublicにしておくしかない
そしてこれはよくあることだ

48:デフォルトの名無しさん
19/10/11 00:26:16.32 i87v0bN60.net
全部virtualだろ普通

49:デフォルトの名無しさん
19/10/11 06:13:02.24 YbeJbbo90.net
皆さんは、Windowsノートパソコンで開発されてるのでしょうか?
それともsurface?MacBook Pro?iPad Pro?
プログラミング用にMacBookをすすめるサイトをよく見ますがC#ではやはりWindows機?
個人的にはThinkPadかなと思ってますが
皆さんはどんなもんですか

50:デフォルトの名無しさん
19/10/11 06:47:08.88 MFeQoEVg0.net
デスクトップだけど

51:デフォルトの名無しさん
19/10/11 07:23:14.81 e5VBdiYBM.net
>>47
> そしてこれはよくあることだ
ねーよ
よくあるとしたらお前の設計力が無さすぎ
そもそも
> メソッドBをちょっと変えた
> メソッドB2を作りたいときに
の時にBからB2をコピペして改変する時点でアホ丸出し

52:デフォルトの名無しさん
19/10/11 07:54:18.02 vfhfRP3v0.net
>>51
え?じゃあどうするん?
話の主旨とそれるけど
virtualにしてもやっぱりメソッドCは呼べんやろ
それで?
どうしたいって?

53:デフォルトの名無しさん
19/10/11 08:18:01.09 e5VBdiYBM.net
>>52
アホすぎる…
クラスAをベースクラスにして変更部分をvirtualで差し替えてA1(これが今までのA)とA2を作る
変更部分にCを呼ぶコードがあるならCはクラスA1にだけあればいい
変更部分にCを呼ぶコードがないならCはクラスAに置いとけばいい

54:デフォルトの名無しさん
19/10/11 08:20:42.62 vfhfRP3v0.net
>>53
え?なんかよくわからない
>>39みたいにかけない?
継承先でメソッドCを呼ぶ必要があるときどうだって?

55:デフォルトの名無しさん
19/10/11 08:24:45.95 blacN5wca.net
>>50
うぅ・・

56:デフォルトの名無しさん
19/10/11 08:43:13.37 Q3FyvZZg0.net
今開発中のもので初めて例外を補足しない強制終了が起こったのですが、原因としては唯一のunsafeであるstackallocだと思われます
var stack = count <= 20 ? stackalloc ulong[count] : new ulong[count];
動的なサイズですが上記のように一応サイズ制限はしていたのですが、ulong[20](160byte)程度でもスタックオーバーフローは起こり得るんでしょうか?

57:デフォルトの名無しさん
19/10/11 08:56:19.70 e5VBdiYBM.net
>>54
ちょっとは勉強しろよ...
両方の継承先で呼ぶ必要があるならベースに置けばいい
どっちか片方だけでいいなら必要とする継承先に置けばいいだけ
まともにコード書いたことないのか?

58:デフォルトの名無しさん
19/10/11 08:56:32.12 01d3zJlsM.net
>>30です。
何かヒント頂けないでしょうか。

59:デフォルトの名無しさん
19/10/11 09:01:19.07 w9BsPIYw0.net
>>56
残りスタックが少なければ起こりうると思うけど例外吐いてないなら別の要因じゃないかと思う

60:デフォルトの名無しさん
19/10/11 09:06:03.62 Nij9ynML0.net
>>56
イベントログを見てStackOverflowExceptionであることは確認した?

61:デフォルトの名無しさん
19/10/11 09:46:04.72 ZRjHQIQqM.net
>>56
それコンパイル通るのか?
?の第2オペランドと第3オペランドの型があってないように見えるが

62:デフォルトの名無しさん
19/10/11 10:32:44.13 4B4iU4j0a.net
>>61
URLリンク(ufcpp.net)
C#7.2から出来るようになった
stackallocもnewも暗黙的にSpan<T>へ変換される

63:デフォルトの名無しさん
19/10/11 11:58:36.03 y81cSpJS0.net
>>57
え?
意味不明

64:デフォルトの名無しさん
19/10/11 12:32:45.04 e5VBdiYBM.net
>>63
勉強不足すぎw
てか多態の基本だぞ

65:デフォルトの名無しさん
19/10/11 12:59:48.32 47sbrrFf0.net
>>64
え?継承元のprivateって呼べないよね?

66:デフォルトの名無しさん
19/10/11 13:49:55.26 R9rR1P0/M.net
古いコードを見ているのですが
if (false) {// なにか処理}
がたっくさんあるんです。
到達できないコードが検出されましたって大量に出て当たり前だよ!って
仮に何か意味があるとしたらどんな理由が考えられるでしょうか
全部消せと思うのですが何かわたしの知らないテクニックだったらまずいですし

67:デフォルトの名無しさん
19/10/11 13:49:59.05 V+fiNkQ50.net
C#なら出来るでしょう

68:デフォルトの名無しさん
19/10/11 13:51:26.84 IXdSVzcC0.net
テスト用なんじゃね
必要なくなったからfalseにしているだけでは

69:デフォルトの名無しさん
19/10/11 14:01:31.76 w9BsPIYw0.net
テストとかデバッグ用の処理じゃないかな
#if falseにすれば警告は除去できると思う

70:デフォルトの名無しさん
19/10/11 14:50:33.17 Y/pxrYXGM.net
>>65
継承元のprivateを呼ぶ話なんてしてないだろ
>>53をちゃんと読めよ

71:デフォルトの名無しさん
19/10/11 16:11:04.13 RwnMXNoM0.net
>>70
じゃあ、お前、一連の流れを理解しないでレス付けたな
もうようないわ

72:デフォルトの名無しさん
19/10/11 16:55:31.32 BNgoH63S0.net
Properties.Settings.Defaultについて教えてください
DataGridViewのセル幅の設定を保存したいのですが、いい方法はあるでしょうか?
セルが20個ほど並んでるのですが、Settings.SettingsにはInt[]の配列が選べないし
プロパティバインディングも項目がありません、たくさんのIntを保存するにはどうしたらよいでしょか?

73:デフォルトの名無しさん
19/10/11 16:55:34.98 Qe/y/ERba.net
>>66
謎だねw
#ifディレクティブやコメントアウトを選択しなかった理由は
IDEでシンボル検索した時に引っかかるようにしたかったから、とかも考えられるけど、
まあ多分単純に書いた人がアホなだけだろうw
仮にそうう理由があるとしてもfalseなんてリテラルをそのまま書くのは意味が分からん

74:デフォルトの名無しさん
19/10/11 17:05:59.65 V+fiNkQ50.net
Java屋に呪いをかけられた。

75:デフォルトの名無しさん
19/10/11 17:10:57.43 Nij9ynML0.net
>>72
カンマ区切りの文字列にでもするとか

76:デフォルトの名無しさん
19/10/11 17:48:11.14 6fhPxX7E0.net
json.netで文字列にして保存とか・・・そこまでやるならってのはナシで

77:デフォルトの名無しさん
19/10/11 17:58:14.17 Y/pxrYXGM.net
>>71
バカの逆ギレかよ
念の為に言っておくけど元々>>47程度の要件では派生クラスからCを呼ぶなんて必要ないってことな
まあ君には一生理解できないかもしれないけどw

78:デフォルトの名無しさん
19/10/11 18:18:20.39 8nYO+EkJd.net
質問した人はもはや興味なくなってそう

79:デフォルトの名無しさん
19/10/11 19:16:25.09 BNgoH63S0.net
>>75
レスサンクス
カンマで区切って、文字列を数値にして
今それっぽい事をやってみたんですが、なにやら挙動があやしい
>>76
れすさんくす
やはり文字列になってしまうのでしょか、int[]あれば便利なのに

80:デフォルトの名無しさん
19/10/11 19:54:41.57 V+fiNkQ50.net
splitで配列化出来るでしょ?

81:デフォルトの名無しさん
19/10/11 19:57:20.55 Nij9ynML0.net
挙動が怪しいって言われてもコメントしようがない

82:デフォルトの名無しさん
19/10/11 19:59:39.92 NbTMQOfEr.net
カンマが全角半角交じりなのかもね

83:デフォルトの名無しさん
19/10/11 20:21:50.98 BNgoH63S0.net
>>80
さんくす
数字カンマで区切ってsplitですか、簡単にできそうですね
>>81
保存する種類をsystem.collections.specialized.stringcollectionとゆう文字列のコレクションを使って
.addと.clearでいろいろやってるうちにwidthが0になったりと
Properties.Settings.Default.cellwidth = new System.Collections.Specialized.StringCollection();
for (int i = 0; i < DataGridView1.ColumnCount; i++)
{
  Properties.Settings.Default.cellwidth.Add(DataGridView1.Columns[i].Width.ToString());
}
こんなんです、これは捨てます

84:デフォルトの名無しさん
19/10/11 20:36:41.64 w9BsPIYw0.net
string.Join(",", array)で保存
array=text.Split(",").ToArray()で復元
スマホで書いたからミスってたらごめん

85:デフォルトの名無しさん
19/10/11 20:37:39.82 NJkU4MQ7a.net
>>49
非光沢液晶のパソコンでプログラミングすることをすすめます。

86:デフォルトの名無しさん
19/10/11 20:48:12.25 BNgoH63S0.net
>>84
さんくすです
それは答えですね、やってみます

87:デフォルトの名無しさん
19/10/11 21:11:40.42 LwZAFcHp0.net
これと違うの?
URLリンク(dobon.net)

88:デフォルトの名無しさん
19/10/11 21:37:31.10 LwZAFcHp0.net
>>47
本来クラスA2に置くべきメソッドB2を
循環参照になってしまうからという理由で別クラスに作るというアプローチに問題がある

89:デフォルトの名無しさん
19/10/11 21:55:04.78 Obz6LqVu0.net
不要な循環参照は避けるに越したことはないが
絶対に回避しないといけないものではないしな
設計的に妥当かどうか

90:デフォルトの名無しさん
19/10/11 22:06:26.29 BNgoH63S0.net
>>87
さんくすです
型を増やすのは難しそうで、ちょっと敬遠してたのですが
いちどやってみます

91:36
19/10/11 22:30:13.36 SS1U2hzP0.net
遅くなりましたがありがとうございました。とりあえずprivateでやってみようと思います。
しかし恥ずかしながらローカル関数って初めて知りました……こんなんあったのか

92:デフォルトの名無しさん
19/10/11 23:40:49.38 AHeGNijQM.net
なんとローカルクラスもあったりするぞ

93:デフォルトの名無しさん
19/10/12 03:22:40.33 wdaAvj3T0.net
ローカルクラスとか初めて聞いたんだが
Javaか何かと間違えてないか?

94:デフォルトの名無しさん
19/10/12 03:39:46.40 GmlLfjiE0.net
内部クラスつまりクラス内クラスのことかもな
ローカルクラスとは言わないけどな

95:デフォルトの名無しさん
19/10/12 08:19:37.23 2OGp7+/U0.net
匿名クラスのことだろ
LinQの関数の戻りとかでたまに使う

96:
19/10/12 08:24:48 2OGp7+/U0.net
var hoge = new { Name = "Masashi", Hage = true };
こんな感じで宣言出來ると思う

97:
19/10/12 11:24:29 tnbTUN6u0.net
class hoge {
  class fuga {}
  class moge {}
}

こういうやつ
呼び方は知らん

98:
19/10/12 11:25:43 V3SUioeZ0.net
ローカルクラスwww

99:デフォルトの名無しさん
19/10/12 11:45:16.39 vesGJIfT0.net
Java 用語だったのか。 < ローカルクラス
クラス内だけじゃなくてメソッド内でも作れるみたいだけど。
匿名クラスは無名クラスだと思ってた自分。

この流れでしょうもないことを聞いてみる。
static なメンバ変数の修飾子というか、
static でないメンバ変数の this.[変数名] の this に当たるようなのってなにかないですか。
[クラス名].[変数名] で ok なのだけど、[クラス名] の部分を固定でやる方法ないかなと。

100:
19/10/12 11:59:16 XFT6PVwJ0.net
>>99
エイリアスとかこういう話?
using ディレクティブ
URLリンク(docs.microsoft.com)

101:
19/10/12 13:15:47 4Z7PGm8S0.net
>>100
横からだけど初めて知った
サンクス

102:デフォルトの名無しさん
19/10/13 08:38:04.22 LP1yPe2h0.net
for(int i = 0; DataGridView1.Columns.Count > i; i++)
{
  DataGridView1.Columns[i].MinimumWidth = 20;
}
これってもっと簡単に書けませんか?

103:デフォルトの名無しさん
19/10/13 08:43:29.30 vtlUUDcx0.net
重複するコードを削っていくのがコツ

104:デフォルトの名無しさん
19/10/13 08:45:05.27 vtlUUDcx0.net
コード変えていいならLINQとかもあり

105:デフォルトの名無しさん
19/10/13 09:09:50.77 d8Y4MxQw0.net
全回しするときは基本的にforeachを使う
ただlinqのforeachを使ってよいのかはよくわからん。パフォーマンス悪いと聞くし

106:
19/10/13 09:18:59 MGaULTRj0.net
LinqにForEachはない
あれはリストのメソッドだよ

107:
19/10/13 09:22:18 LP1yPe2h0.net
>>103>>104
さんくすです、LINQってことはSelectをつかうんでしょうか
>>105
さんくすです、パフォーマンスは落ちてもかまわないんで
最初foreachで書こうと思ったんですが、わからなく

108:デフォルトの名無しさん
19/10/13 09:33:52.48 f3TGJJSYa.net
ん?
for (var c in DataGridView1.Columns) { c.MinimumWidth=20; }
よりも短く描きたいってこと?

109:デフォルトの名無しさん
19/10/13 09:47:34.60 OAJhlsQO0.net
そんなんどうでもいいから動くモノ作れよ初心者

110:デフォルトの名無しさん
19/10/13 11:07:58.19 LP1yPe2h0.net
>>108
さんくす、面白い書き方ですね、ただMimimumWidthが出てきませんでした
少し変えればよさそうだけど、どこをどうかえれば

111:
19/10/13 11:40:17 OktAHnGcM.net
>>108
foreach

112:デフォルトの名無しさん
19/10/13 11:45:00.17 MGaULTRj0.net
>>110
var をDataGridColumn に変えれば出る

113:デフォルトの名無しさん
19/10/13 11:55:56.33 f3TGJJSYa.net
えーそんなわけないでしょと思って確認したら
ColumnsのDataGridViewColumnCollectionは非ジェネリクスのIListしか実装してないのか・・・
DataGridViewってVS2005以前の書き方で実装されてるのね
となると、かっこ悪いけどキャストをかませて
for (var c in DataGridView1.Columns) { (c as DataGridViewColumn).MinimumWidth=20; }
と書くくらいしかないか、>>103のとおりDataGridView.Columnsを変数にするくらいしかなさそう

114:デフォルトの名無しさん
19/10/13 11:57:39.01 f3TGJJSYa.net
あ、forじゃなくてforeachか
ちゃんとIDEなりVSCodeなり立ち上げて書かなきゃだめね、失礼

115:デフォルトの名無しさん
19/10/13 12:28:10.86 Fykc0AcJ0.net
抽象クラスとインターフェースの使い分けのコツを具体例で教えて下さい!

116:
19/10/13 12:37:21 mgqzqij/M.net
昔の人は言いました「習うより慣れろ」

117:
19/10/13 12:37:30 f2RSEbKl0.net
そんなんどうでもいいから動くモノ作れよ初心者

118:デフォルトの名無しさん
19/10/13 12:43:25.13 2Iz5cpana.net
>>116
使い分ける必要はない
常にインターフェイスを使う、でいいよ
抽象クラスはインターフェイスを使った上で、どうしても実装の大部分が重複してしまうような場合に稀に使うことがある、という程度のもの
全く使わなくても問題はない

119:デフォルトの名無しさん
19/10/13 12:58:41.62 BB7naElC0.net
>>100
所属クラスを示す汎用のエイリアスのようなものがないかなーと。
でも using static ディレクティブ自体を知らなかったので勉強になりました。これを定義すれば結果として同じ事出来るし。
ありがとう。

120:デフォルトの名無しさん
19/10/13 13:02:36.16 mgqzqij/M.net
昔の人は言いました「100人のプログラマーがいたら100通りのオブジェクト指向がある」

121:
19/10/13 13:29:52 LP1yPe2h0.net
>>112
さんくすです出ました
foreach(DataGridViewColumn c in DataGridView1.Columns) { c.MinimumWidth = 20; }

>>113
さんくすですキャストのほうでもいけました

122:
19/10/13 14:00:31 2cfG7zlA0.net
8からデフォルト実装も入るからますます使いどころが

123:
19/10/13 18:12:47 0yCAsIX/0.net
WinFormsで、フォーカスが当たってない時でもキー入力を取る方法ってありますか?

124:
19/10/13 18:19:19 jypX7pQ50.net
>>123
URLリンク(qiita.com)

125:デフォルトの名無しさん
19/10/15 07:52:01.52 AMNrrJ6ya.net
>>123
key入力をグローバルHook

126:デフォルトの名無しさん
19/10/15 11:19:35.89 m0jqn6iGp.net
アプリ自体にフォーカス当たって無くてもいいの?

127:デフォルトの名無しさん
19/10/15 11:24:15.06 pr9WFxZa0.net
イインダヨ

128:デフォルトの名無しさん
19/10/15 11:28:33.47 m0jqn6iGp.net
ああ、パスワードスキミングするならむしろそうじゃないと都合悪いかw

129:デフォルトの名無しさん
19/10/15 11:50:04.39 +5Q+C2RJM.net
必死でない頭絞って
やっと浮かんだ用途がそれなのか?
残念な人だこと…

130:デフォルトの名無しさん
19/10/15 14:23:13.71 fSd1Dwex0.net
この手の質問に対する定番の回答やぞ

131:
19/10/15 20:41:28 5pSAXFzm0.net
1ヶ月位VBAを触って今日Visual Studio Express 2017をインストールしました
せっかくならVBAの癖が着く前に…と思ったのですが、VBAで書いたプログラムに互換性は無いでしょうか?

132:デフォルトの名無しさん
19/10/15 20:52:55.04 Hz78fwHza.net
>>131
ここ、C#のスレだよw
VBAは20年前に死亡宣告されたVB6の親戚。
今のVisual Studioに入ってるVisual Basicとは似てるけど別物。
もちろんC#とは似ても似つかない

133:デフォルトの名無しさん
19/10/15 20:54:38.84 E2P2T6Cd0.net
>>131
VBAとC#/VB.NETは別物
あとなんでVS2017のExpressをインストールしたのさ
わざわざ機能制限版のExpressを使うとかマゾプレイヤーかな?

134:
19/10/15 21:03:51 5pSAXFzm0.net
>>132
1から勉強しなおしになるでしょうか?
Visual StudioでもC#を使えると思っていました

>>133
社内のライセンスとセキュリティの関係でExpressしかダメと言われてしまいました

135:
19/10/15 21:13:12 E/67JFVJ0.net
SharpDevelop入れて、C#→vbかな

136:
19/10/15 21:15:31 n+UvEGVJ0.net
>>134
質問の内容が変わっているよね
VBAで作ったものはVB.Netに手直し程度で動かせるようになるものができる場合もあるけどC#は書き方も完全に別物
ここで聞くより自分のPCで動かしてみたほうが早い

137:
19/10/15 21:15:48 h8W4Pu510.net
>>135
そこはVisual Studio Codeやろ…

138:デフォルトの名無しさん (アウアウウー Sa5b-YqqQ)
19/10/15 21:16:06 Hz78fwHza.net
>>134
C#を使えないなんて言ってないよw
VBAとC#は完全に別の言語だと言ってるだけ
VBAの知識はC#を覚える上でほとんど役に立たないよと

139:デフォルトの名無しさん (ワッチョイ 972d-epSy)
19/10/15 21:20:18 zMbku3w90.net
用語と名付けルールについていくつか教えてください
まず、class Asdf{}の入れた物(Asdf asdf; でいうasdf)は、何と呼べばいいんですか?変数でいいのでしょうか?
また、Asdfの入ったものを自動プロパティで宣言したい場合、一文字めを大文字にすべきなのでしょうか?
Asdf Asdf{get; set;}なのか、Asdf asdf{get; set;}なのかどちらが正しいのでしょうか

140:
19/10/15 21:23:27 NTOFWHv0a.net
>>139
Asdf asdf; のasdfは変数名でいい
プロパティ名はCamelCase(先頭大文字)にするのが慣習、自動実装プロパティかどうかは無関係

141:
19/10/15 21:25:58 5pSAXFzm0.net
>>136
失礼しました
まずは色々と触ってみます

>>138
早とちりしてしまいました
基本から勉強してみます

ありがとうございます

142:デフォルトの名無しさん (ワッチョイ 972d-epSy)
19/10/15 22:44:41 zMbku3w90.net
>>140
ありがとうございます
大文字かどうかは、クラス名とプロパティ名が一緒になってしまっていいのか結構疑問に思っていたのでスッキリしました

143:デフォルトの名無しさん
19/10/17 01:03:06.25 GTpPRCCe0.net
Pythonでは文字列をコマンドとして実行するのにevalとexecの2つあるみたいですが
C#で文字列をコマンドとして実行するには、eval以外の関数はありますか?

144:
19/10/17 01:25:51 lbhPCdA40.net
あるよ

145:デフォルトの名無しさん (ワイーワ2 FF6a-uHRg)
19/10/17 09:37:45 ewN8FeZ7F.net
subprocess.popen
subprocess.call
subprocess.call_hogehoge
もっとあるぞ

146:デフォルトの名無しさん (ワッチョイ 5fda-+VEO)
19/10/17 11:49:09 qkwcuRdz0.net
フォーム間でのデータの受け渡しを行うクールな方法を教えて下さい。
今は以下の2通りの方法ででやっています。
?互いの公開プロパティ(public get / private set)を参照しあう。
 (互いに相手フォームへの参照を通じて取得するので疎結合になり切れていない)
?データ保持用クラスを作って、そのインスタンスを参照する。
 (データ保持用クラスが増えまくって、だんだん管理困難になりそう)

147:
19/10/17 12:12:42 lbhPCdA40.net
MQで結合

148:デフォルトの名無しさん
19/10/17 12:32:44.65 tq7j3RVK0.net
MVCのM

149:デフォルトの名無しさん
19/10/17 12:38:06.93 p0JdpBwB0.net
WpfやUWPなどではDIコンテナってものを使うのが流行りだが、WindowsFormsでも存在するそうだ
こっちは使ったことがないからお薦めはわからんがググって探してみるといい
まあクールってことならWindowsForms捨てるのも一つだね

150:
19/10/17 13:00:04 gr44XWYWM.net
>>146
DB

151:デフォルトの名無しさん
19/10/17 13:34:04.59 gr44XWYWM.net
>>149
WPFやUWP自体がほぼ全くと言っていいほど使われていないのに流行りも何も
DIコンテナは主にWebで利用されるもので、デスクトップアプリではあまり使われないよ
アプリの起動を遅くする原因になりやすいし、エンドユーザーにバイナリを直接配布するタイプのアプリではそもそも実装を差し替えたいというニーズ自体が稀だからね

152:
19/10/17 15:08:30 LDYcAoDdM.net
DIコンテナはこの場合関係ないのでは?
結局素直に?でやるのがいいと思う

153:
19/10/17 15:44:16 U3fOiqzQ0.net
>>146
クールな方法というか堅実・定石な方法
フォーム間のデータのやり取りなら?

相手のフォームに依存するとテスト時や改修時に困るでしょ
原則として相手の画面やクラスの事は知らないに越したことは無い

その設計でもデータ保持用クラスの管理が大変になることは無い
管理が大変になる場合は設計がおかしい
画面遷移の組合せ数分クラス作るとかアホなことすれば大変だろうけど

154:
19/10/17 17:38:31 xrf7PluH0.net
wpfのCheckBoxについてですが、Contentに文字を設定するとその文字の表示範囲もチェックオンオフの感知範囲になってしまいます
これを無効にして純粋にチェックボックスの□のみをクリック範囲にすることはできないのでしょうか?
CheckBoxのContentに文字を設定するのではなく、横にTextBlockを置くなどしないと無理でしょうか?

155:
19/10/17 17:46:05 Cw+SiV+E0.net
うん

156:
19/10/17 17:47:00 LBezDrpM0.net
>>154
手段としてはその通りだと思う。

しかし、あのちっさいチェックボックスに正確にマウスを当てないと反応しないってのは、
使い勝手からするとどうかと思う。誤クリックが多いというなら、そもそもの配置場所が悪い

157:
19/10/17 17:49:21 f5CxH478a.net
>>154
PreviewMouseDownイベントを追加して
e.OriginalSourceからVisualTreeHelper.GetParent()でVisualTreeを親方向にたどっていき
途中に"checkBoxBorder"というNameのBorderがあればe.Handled=true;で無効化出来るかもしれない
出来るかもしれないが一般的にCheckBoxはテキスト部分をクリックしてもオンオフ出来るものだから
その一般的な挙動を逸脱するよっぽどの理由がなければ止めておいたほうがいい

158:
19/10/17 18:14:20 xrf7PluH0.net
>>156>157
ありがとうございます
具体的にはListBox内にCheckBoxを配置しており、チェックとは別にListBoxから選択時に多少のインフォメーションを表示するといった形にしたいためContentも含めると誤クリックが発生してしまいます
とりあえずは文字とCheckBoxは分離する方向でやってみたいと思います

159:
19/10/17 19:36:38 ukHDmGyB0.net
先日C#を始めたものです
Hello Worldを記述出来ました
エクセル等のオフィスソフトに対応している初心者向けのサイトは無いでしょうか?
よろしくお願いします

160:
19/10/17 19:50:38 fD4z5OoEd.net
C#てオフィスを使って処理したいってこと?

161:デフォルトの名無しさん
19/10/17 20:50:59.23 ukHDmGyB0.net
C#を使ってエクセル等を操作したいと思っています

162:デフォルトの名無しさん
19/10/17 20:53:46.00 35zh2Zdy0.net
>>161
Microsoft Visual C# .NET から Microsoft Excel を自動化する方法
URLリンク(docs.microsoft.com)
こういう意図でC#を使う人は少ないと思うからそういうサイトもあまりないのでは

163:デフォルトの名無しさん
19/10/17 20:54:08.32 U+7e/yzz0.net
>>161
epplusが手軽だと個人的には思う
サイトはいくつかあるからググって

164:デフォルトの名無しさん
19/10/17 21:33:04.59 tq7j3RVK0.net
VSTO
URLリンク(docs.microsoft.com)
URLリンク(docs.microsoft.com)
URLリンク(blogs.msdn.microsoft.com)
COMとVSTOの違いはググって

165:デフォルトの名無しさん
19/10/17 22:09:06.50 o4qw9kXC0.net
ClosedXML
URLリンク(www.atmarkit.co.jp)

166:デフォルトの名無しさん
19/10/17 23:15:21.70 U3fOiqzQ0.net
Closed便利よね
バグ踏んだら面倒だけど

167:デフォルトの名無しさん
19/10/17 23:18:37.31 fKr8aC1m0.net
プロパティで、StringをDateTimeのようにnull許容できるようにしたいのですが、可能でしょうか?
public DateTime? test1 { get; set; } ← 可
public String? test2 { get; set; } ← 不可
DapperでDB操作してるのですが、DBゆえにnullがあるのでどうしたものかと

168:デフォルトの名無しさん
19/10/17 23:30:47.28 +xa644SFa.net
C#8.0の新しい文法を使う意図だったら「#nullable enable」のディレクティブをつけないとnull許容参照型にならないよ
そうでなければ、stringは参照型だから?をつけずとも普通にnull許容

169:デフォルトの名無しさん
19/10/18 00:25:33.50 C4vTbpVj0.net
>>162
>>163
ありがとうございます

170:デフォルトの名無しさん
19/10/18 00:26:47.30 C4vTbpVj0.net
>>164
>>165
ありがとうございます

171:デフォルトの名無しさん
19/10/18 04:48:07.86 7fyCEFV70.net
>>162
帳票作成でC#使うなんてよくある話だろ

172:デフォルトの名無しさん
19/10/18 17:37:44.07 P+E8yzNh0.net
>>168
Stringはそもそもnull許容なのですね
Dapperでデータ取れないのは別の事情がありそうなので調査してみます
ありがとうございます

173:デフォルトの名無しさん
19/10/18 20:34:45.07 L2N4rS5+M.net
>>171
帳票作成でC#を使うこととC#でExcelを操作することはかなり違うけどな

174:デフォルトの名無しさん
19/10/18 20:43:02.28 7fyCEFV70.net
>>173
>>162が正にそれだろ

175:デフォルトの名無しさん
19/10/18 21:35:27.82 1VxWd/yq0.net
>>174
日本語が理解できないのか?
> こういう意図でC#を使う人は少ないと思うからそういうサイトもあまりないのでは
>>162はその少ないサイトって話だろ…

176:デフォルトの名無しさん
19/10/18 21:44:11.74 nML+rjlo0.net
データを取得したんですが
第三正規系までできません。
こちらのデータを第三正規系にお願いします。
第一正規系はやりました。
URLリンク(i.imgur.com)

おすし名,おすしID,店舗ID,価格,データ取得日時,店舗名,おすし説明,色,分類,大きさ
まぐろ赤身,MGR-0000,KRA,120,2019/10/18,くら寿司,さっぱりうまい。上出来,鮮やか,赤身,小さい
まぐろ赤身,MGR-0001,SSR,110,2019/10/18,スシロー,こってりうまい。おすすめ,濃い,赤身,大きい
まぐろ赤身,MGR-0002,HMZ,90,2019/10/18,はま寿司,まずい。食えたもんじゃない,汚い,赤身,小さい
まぐろ赤身(漬け),MGRZ-0000,KRA,140,2019/10/18,くら寿司,漬け。さっぱりうまい。上出来,鮮やか,漬け,大きい
まぐろ赤身(漬け),MGRZ-0001,SSR,130,2019/10/18,スシロー,漬け。こってりうまい。おすすめ,濃い,漬け,大きい
まぐろ赤身(漬け),MGRZ-0001,HMZ,100,2019/10/18,はま寿司,漬け。まずい。食えたもんじゃない,汚い,漬け,小さい

177:デフォルトの名無しさん
19/10/18 21:51:06.59 7fyCEFV70.net
>>175
日本語理解できてないのはそっちやろ…
>>174は「帳票作成でC#を使うこととC#でExcelを操作することはかなり違う」に対する反論

178:デフォルトの名無しさん
19/10/18 22:22:58.75 bjYJELO9a.net
>>176
このスレのタイトルを3回声に出して読んでみようか

179:デフォルトの名無しさん
19/10/18 22:51:19.49 1VxWd/yq0.net
>>177
頭大丈夫?
それとも
> 帳票作成でC#使うなんてよくある話だろ
をごまかしたくて必死なの?w

180:デフォルトの名無しさん
19/10/18 22:55:16.71 esIPpiBW0.net
心底くだらない喧嘩だな

181:デフォルトの名無しさん
19/10/18 23:23:01.26 j4uMIQLH0.net
禿同

182:デフォルトの名無しさん
19/10/19 01:23:21.24 yK8AYG0c0.net
>>179
頭大丈夫?

183:デフォルトの名無しさん
19/10/19 06:44:10.57 a0xT/TLW0.net
>>182
鸚鵡返ししかできないならROMってりゃいいのに…w

184:デフォルトの名無しさん
19/10/19 06:45:15.42 fpN8ACwhd.net
>>183
しつこい

185:デフォルトの名無しさん
19/10/19 08:06:58.91 a0xT/TLW0.net
>>184
夜中までレスしてる>>182に言ってやれよw

186:デフォルトの名無しさん
19/10/19 09:10:08.70 yK8AYG0c0.net
>>183
まだいたのかw

187:
19/10/19 09:47:58 mgwE5Z4r0.net
どこもかしこもマウントレスバトルばかり
なぜひとはあらそってしまうのか…sigh…

188:デフォルトの名無しさん
19/10/19 09:51:09.39 g+81+wWe0.net
しかも、内容が思いっきりくだらない
マウントを取るためだけにレスをしたとしか思えないくだらなさ

189:デフォルトの名無しさん
19/10/19 10:37:10.93 a0xT/TLW0.net
>>186
>>184w

190:デフォルトの名無しさん
19/10/19 17:32:49.19 WQwZNfDO0.net
C#は見かけ上は一見C++に似たような顔で欺いたVBだな。

191:デフォルトの名無しさん
19/10/19 18:32:57.19 BH051H7O0.net
すまんが、インターフェイスとオートプロパティーとがよくわから人だけどさあ
interface IPerson{string Name();}
class Person : IPerson {public string Name{get=>"Taro";}}
これじゃなんでIPerson.Name();を実装したことにならないの?正しくはどうすればよかんべえ?

192:デフォルトの名無しさん
19/10/19 18:36:03.37 BH051H7O0.net
自分で気づいて今インターフェイスをstring Name{get;}にしてみたらできた
すまん、191のは無視してくれ・・・・

193:デフォルトの名無しさん
19/10/19 18:39:04.57 qmet2mEe0.net
インターフェイスがメソッドで実装がクラスだからダメ

194:デフォルトの名無しさん
19/10/19 18:39:28.35 qmet2mEe0.net
×実装がクラス
○実装がプロパティ

195:デフォルトの名無しさん (ワッチョイ e334-V+wO)
19/10/21 20:48:34 Q380rRZI0.net
ListViewをLargeImageListとして使って、かつ画像は非同期的に読み込んで反映させていきたいんだけど、
ImageListを変更しても画像が差し変わらない。アイテムを選択したりすると変わる。
差し替え後に強制的に反映させるにはListViewをRefleshするしかない?

196:デフォルトの名無しさん (ワッチョイ 5fda-S3Tg)
19/10/21 22:28:12 WYoX45rO0.net
ListViewItemのVMにINotifyPropertyChanged実装しとらんのか?

197:デフォルトの名無しさん (ワッチョイ 4bda-PVzv)
19/10/21 22:36:01 gFaZXUyV0.net
RichTextBox.Textプロパティに数MBの文字列をセットすると
5秒くらいフォームがフリーズするので
Task/async/await的なコードを試したのですが
別スレッドからコントロールにはアクセスできないと怒られ
それではとInvokeメソッドを使ってみるも
今度はアクセスで怒られない代わりにまたフリーズ。

上手いこと非同期でTextプロパティにセットする
方法はありますかね。

198:デフォルトの名無しさん
19/10/21 22:46:01.22 /X8txQrc0.net
>>197
数MBの文字列程度でフリーズした経験はないけど、その環境でフリーズするのなら非同期にしても解決はしないよ
Invoke使おうがその文字列の処理にそれだけかかるのだからどうしようもない
非同期にするのは処理中にキャンセルするとか他のGUIからの入力処理をする目的じゃないと

199:デフォルトの名無しさん (ワッチョイ 4bda-PVzv)
19/10/21 23:04:39 gFaZXUyV0.net
ありがとうございます
そういう回答がいただけただけでも助かります
違った角度からの解決策を考えます

200:デフォルトの名無しさん (アウアウウー Sa43-WFp/)
19/10/21 23:10:37 VNGEIVP2a.net
>>197
やったことないけどこれかね
URLリンク(stackoverflow.com)

201:デフォルトの名無しさん (ワッチョイ d201-4js2)
19/10/22 00:05:51 QfoZv31s0.net
>>197
WPF?

202:デフォルトの名無しさん
19/10/22 10:07:09.79 YHA3BCJ70.net
事情が許されるなら、俺ならRTFをHTML変換してブラウザコントロールで表示させるけどね

203:デフォルトの名無しさん
19/10/22 13:25:27.23 K+KsF9ms0.net
試してなくて妄想だけけど、SuspendLayout/ResumeLayoutとか?

204:デフォルトの名無しさん
19/10/22 14:13:07.80 d9ySxcs9a.net
UIスレッド自体が輻輳してるんだからそんなことしても無意味w
別のプロセスか別のUIスレッドで動作させるか、
あるいは小分けにしてちょっとずつ更新するしかないと思うよ。

205:デフォルトの名無しさん
19/10/22 19:15:02.64 ZcCp4/Eg0.net
クラス継承の意義がイマイチ分かりません
継承したいクラスをフィールドに持たせ、共通して呼び出したいものはインターフェースとして定義するではダメなのでしょうか?
単にその両者をいっぺんにやるためにあるという理解で良いんでしょうか?

206:デフォルトの名無しさん
19/10/22 19:40:35.35 i9vhc7D5M.net
>>205
それで正しいよ
現代のオブジェクト指向においては継承は基本的に悪であって、極力使うべきではない

207:デフォルトの名無しさん
19/10/22 20:13:37.49 N0Z1aA+u0.net
継承が悪ってww

208:デフォルトの名無しさん
19/10/22 20:19:18.17 d9ySxcs9a.net
アポロ13って映画に「何のために作られたかではなく、何に使えるかが重要」って台詞が出てくるけど、
意義とか考えるのは(重要だとは思うけど)後回しにして、どういう使い方ができるかに
注視した方がいいよw
あと、オブジェクト指向関係で教条主義的なことを言う奴の話は眉に唾して聞いた方がいいw
これほんと

209:デフォルトの名無しさん
19/10/22 20:23:35.17 r8U+7Z6M0.net
.NET Framework は悪の塊だったのか

210:デフォルトの名無しさん
19/10/22 21:06:42.53 CFL/N7o/d.net
>>206
継承が悪ワロタ

211:デフォルトの名無しさん
19/10/22 21:09:14.91 V41RXtJo0.net
>>209
悪の帝国Microsoft製だししょうがないなw

212:デフォルトの名無しさん
19/10/22 21:18:38.74 mNMm3WnU0.net
あ~熊の力~身に付けた~
正義のヒーロー

213:デフォルトの名無しさん
19/10/22 21:22:00.43 5xlDZDfD0.net
毛深いヒーローだな

214:デフォルトの名無しさん
19/10/22 21:25:50.97 EpnXDCZ50.net
Windows上でVisual Studioを立ち上げて.Netアプリ開発をする以上
お前も悪の帝国の軍門に下って生きるしかないのだ

215:デフォルトの名無しさん
19/10/22 22:38:30.26 QfoZv31s0.net
>>205
例えばフレームワークが用意してるControllerクラスを継承して20個くらい個別のコントローラーを作る場合と
個別のコントローラーにControllerクラスを持たせて呼び出しを委譲できるようにする場合
前者はカスタマイズしたい部分だけ書けばいいけど
後者はControllerの機能を呼び出すためにはすべてのクラスに委譲メソッドを用意する必要がある
Controllerのメソッドを20個呼び出したいなら20x20で400個委譲メソッド定義をしないといけないしテストもしないといけない
自動生成することも可能だけどそれを考慮しても必要になる労力とコンポジションで得られる柔軟性が見合わない
それぞれメリット・デメリットあるからそれを判断して使い分けるのが良いと思う

216:デフォルトの名無しさん
19/10/22 23:18:54.36 HqQPrhiP0.net
正しいと思うけど、継承のメリットを論じている段階でその例はたぶん通じない。ちんぷんかんぷんだと思うよ

217:デフォルトの名無しさん
19/10/22 23:34:28.25 bvw0XH6G0.net
そういえばc#になってから継承なんて使った覚えがないな

218:デフォルトの名無しさん
19/10/22 23:58:38.64 R7p1RKV4a.net
継承を使うとしても、KeyedCollectionみたいな用意されたabstractクラスの具象を書くくらいかな
クラシックなWinForms/WebFormsと格闘するなら継承ありきなんだろうけど

219:デフォルトの名無しさん
19/10/23 00:02:52.61 rbcKcx270.net
>>217
Formクラスの継承しないの?

220:デフォルトの名無しさん
19/10/23 01:24:57.24 m9ZvUGV10.net
List型からカンマ区切りの文字列にしたいのですが、先頭や最後にカンマがくっついて欲しくありません
こう言う場合ってどう書くのですか?
string s = "";
int i = 0;
foreach(var l in data){
   if(i == 0) i = 1;
   else s += ",";
   s += l.ToString();
}
自分なりにも書いてみたのですがなんか素人感が半端ないです
どうか正しいかっこいい書き方を教えてください、お願いします

221:デフォルトの名無しさん
19/10/23 01:45:41.03 r6mLYpNF0.net
var s = string.Join(",", data);

222:デフォルトの名無しさん
19/10/23 08:41:29.15 cIthmx8S0.net
Goは>>205のような考えで継承廃止したんじゃなかったっけ?
コーディングコスト削減メリットよりも階層複雑化によるデメリットの方が大きいから、やるならインターフェースでやれって考え方だったと思う
天下のグーグルがそう言ってるからには継承が悪という考えもあながち全否定は出来ない

223:デフォルトの名無しさん
19/10/23 08:46:57.96 tuL+TD2TM.net
var s = (data.FirstOrDefault() ?? "").ToString()
foreach(var l in data.Skip(1))
s += "," + l
var s = ""
foreach(var l in data)
s += "," + l
s = s.SubString(1)

224:デフォルトの名無しさん
19/10/23 09:10:24.37 9MFdyPJfa.net
>>222
Rustもそうだね
MSやAWSが最近推してる

225:デフォルトの名無しさん
19/10/23 09:26:46.08 s4ZmhUIr0.net
null許容型に属性のrangeが有効か否かを調べたいんだけど、msdnを見ても書かれてない
こういうときってどうやって調べるの??

226:デフォルトの名無しさん
19/10/23 09:57:02.37 N3BHKY3G0.net
Rangeということは「最小値と最大値」の範囲内かどうかなわけで
nullが範囲外なのは自明だからそもそも意味がなくね?
nullは特別に範囲内ってのなら「最小値と最大値」であるRangeじゃなくて他の方法で表現せざるを得ないよね

227:デフォルトの名無しさん
19/10/23 10:43:58.06 s4ZmhUIr0.net
>>226
単純にnull許容型にrangeの属性を付与できるか否かってだけが知りたい
それを調べようとしてもmsdnに記載が見つからないって話
これはtestが0-100になるように有効だろうけど
[range(0,100)]
int test
このrangeは有効なのか?って話
int?にはrangeは無効で101とか入れれますよーとかはないよねって調べたい
[range(0,100)]
int? test

228:デフォルトの名無しさん
19/10/23 11:17:48.75 V6w3FSpA0.net
>>227
range属性自体はstringに対してだろうが付与出来るし、変数への代入を阻止するものじゃない
それが有効かどうかはrange属性を使って検証する側の問題

229:デフォルトの名無しさん
19/10/23 11:52:11.96 mg9LIwfN0.net
ASPについて質問です
MVCにできてWebFormsじゃできないことってどんなのがありますか?

230:デフォルトの名無しさん
19/10/23 12:06:02.89 uTmD95wkr.net
>>229
できる出来ないの基準は?
既存コントロール使わないで全部時前で処理するなら、出来ないことが重い浮かばない

231:デフォルトの名無しさん
19/10/23 12:08:21.81 ixA2IUmYp.net
おまえには出来ないって基準だと思うよ。

232:デフォルトの名無しさん
19/10/23 12:24:26.05 rCWJ/rTC0.net
原理的に出来ないことは無いが大変さが違う
それこそMVCで組みづらいとか
EFとの相性とか
WebAPI作りたいとか
他言語や環境と混ぜづらいとか
つぶしが効かないとか
まあ新規でWebFormsはやめとけと

233:デフォルトの名無しさん
19/10/23 12:39:33.45 9MFdyPJfa.net
>>229
WebFormsは.NET Coreおよび.NET 5以降ではサポートされない
今から新規に使ってはいけない

234:デフォルトの名無しさん
19/10/23 12:51:59.22 s8yqv2t40.net
>>227
Required属性とnon-nullable型の関係を確認すればいいと思う
URLリンク(docs.microsoft.com)

235:デフォルトの名無しさん
19/10/23 13:28:03.53 m9ZvUGV10.net
>>221
>>223
ありがとう
こんなの全然知らなかったよ

236:デフォルトの名無しさん
19/10/23 13:33:09.12 mg9LIwfN0.net
>>233
あざます

237:デフォルトの名無しさん
19/10/23 21:40:38.12 F0j44unH0.net
System.Collections.ConcurrentにConcurrentListはないようですが、スレッドセーフなListはSyncronizedCollectionを使っておけということなんでしょうか?

238:デフォルトの名無しさん
19/10/23 22:41:24.14 MpJkuZYiM.net
>>237
ConcurrentListが無いのは、Listは外部ロックを使わない並行処理との相性が悪いからだろう
追加と参照のみならいいが、削除や途中への挿入があるとインデックスがほとんど意味を持たなくなってしまう
インデックスが指してる要素が他のスレッドによる変更の影響で突然コロコロ変わったら使い物にならないのは容易に想像できるだろ?
SynchronizedCollectionを使うとかそういう話じゃなくて、Listインターフェイスの設計が本質的に並行処理と相容れないんだよ

239:デフォルトの名無しさん
19/10/24 08:41:52.53 vvI6h2Gc0.net
あるソフト使ってて、これ使いたいなって機能があるんだけど、なんて検索かけたらいいのか分からないので知っている人いたら教えてください。
WindowsフォームアプリでVisualStudio2015で開発しています。

[欲しい機能]
例えばWindow内が横3段に分かれいるとすると
------------△---------------
みたいに境界が表示されててそこをクリックすると部分的に隠したり、表示させたりできる機能

今作ってるアプリが監視系で画面上に常駐するので、出来るだけWindow内の邪魔なボタンとかは隠しておきたいのでこの機能が欲しいです。
知ってる方いたらよろしくお願いします。

240:デフォルトの名無しさん
19/10/24 09:07:13.70 1uX6E7L9M.net
>>238
> 追加と参照のみならいいが、削除や途中への挿入があるとインデックスがほとんど意味を持たなくなってしまう
それマルチスレッドじゃなくても起きるだろ

241:デフォルトの名無しさん
19/10/24 09:13:17.80 EafWDMiv0.net
>>239
折りたたみできるpanel とかそんな感じ?

242:デフォルトの名無しさん
19/10/24 09:20:52.19 /Cd29/CTM.net
>>240
程度問題だよ
マルチスレッドなら尚更問題になるのは明らかだろ
結局、インデックスに依存する一連の操作の単位で外部ロックを取る必要があるから、concurrentである意味がない

243:デフォルトの名無しさん
19/10/24 09:51:08.72 1uX6E7L9M.net
>>242
バカなの?
インデックス使って途中挿入削除されたら問題なるのはマルチスレッドには関係ない
そもそも挿入削除してるのにインデックスで処理するのがおかしいと気づけ

244:デフォルトの名無しさん
19/10/24 10:07:31.16 /Cd29/CTM.net
>>243
シングルスレッドでの同期処理ならプログラマが意図しないタイミングで変更が加えられる可能性は少ないだろう
そもそも途中挿入しないならConcurrentBagでいいよね
自分で答え出てるじゃん

245:デフォルトの名無しさん
19/10/24 10:16:49.04 1uX6E7L9M.net
本質を理解できない馬鹿に説明しても無駄なことがよくわかるなw

246:デフォルトの名無しさん
19/10/24 10:31:37.86 /Cd29/CTM.net
同意するわw

247:デフォルトの名無しさん
19/10/24 10:50:43.90 8vd5prrh0.net
>>239
SplitContainer

248:デフォルトの名無しさん
19/10/24 10:58:17.20 xs21harXa.net
>>239
XPの時代のエクスプローラーのタスクパネルみたいなUIだと思うけど
たぶん標準では存在しない
折り畳みできるコンテナを自分で作れば、それを別のPanelの中に入れ子にして
AnchorとDockをうまく設定すれば似たようなことは一応できると思う。
PanelじゃなくてFlowLayoutPanelを使ってもいいかもしれないが、
たぶんかえって使いづらくなりそう

249:デフォルトの名無しさん
19/10/24 10:58:42.47 ey5VOEQr0.net
>>241
そうそう折りたたみって言葉がしっくりきます。

試しに「折りたたみ panel」あたりで検索したらやりたい事が出来そうなサイトが見つけられました。
SplitContainerとクリックイベントを使ってどうにか出来そうです。
また、境界部分にも三角形△などの目印を付けるやり方が載ってるサイトも見つかりました。

いいヒントになりました、ありがとうございます^^

250:デフォルトの名無しさん
19/10/24 10:59:35.93 mB9UhJoj0.net
>>247
>>248
ありがとうございます!

251:デフォルトの名無しさん
19/10/24 11:57:49.13 ABhN6CSmF.net
>>239
Collapse
Accordion

252:デフォルトの名無しさん
19/10/24 21:14:55.46 00cf/jHw0.net
頭に0個の参照って表示されてる関数が無数にあるんですが、これ要するに全く使われてないってことですよね
全部消してしまいたい……と思ったのですが実行する中でその関数が呼び出されるような可能性ってあったりするんでしょうか

253:デフォルトの名無しさん
19/10/24 21:35:06.52 VqWeglU2r.net
リフレクションとかで呼べば参照カウントされないんじゃない

254:デフォルトの名無しさん
19/10/24 21:45:06.56 B+sGouls0.net
なんかのライブラリとかで、publicで公開してるやつとかか?

255:デフォルトの名無しさん
19/10/24 22:06:02.66 Eph2jaDU0.net
複数のパネルをドラッグドロップできるようにしたんだけど
マウスが別のパネルに重なったときにパネルがいれかわってしまうんだけど
これを防ぐにはどうしたらいい?

256:デフォルトの名無しさん
19/10/24 22:14:48.43 yaJ1dO+n0.net
>>255
「パネル」をドラッグドロップしている?
一番上または必要なパネル以外のドラッグドロップを受け付けないようにしたら

257:デフォルトの名無しさん
19/10/24 22:17:00.79 WLXJ5XGy0.net
>>255
マウスダウンで「掴む」じゃん
マウスドラッグで「移動」するじゃん
マウスアップで「置く」じゃん
ドラッグ中の処理は移動なのにどうしてマウスダウンで掴んだやつ
以外が動いちゃうん?

258:デフォルトの名無しさん
19/10/24 23:01:06.74 yaJ1dO+n0.net
マウスがパネルに触れた時点でフォーカス変わったりしているとかだろ
最低限の動きするミニマムコード使って検証する方がここで聞くより解決しやすいと思うがね
そこでわからなかったらそのミニマムコード出してまた質問したらここの人も答えやすい

259:デフォルトの名無しさん
19/10/24 23:02:09.24 00cf/jHw0.net
>>253
あーなるほどでもそんな上等な書き方出来る人が作ったわけじゃないからなさそうですね
>>254
他の似たようなソフト作る時に使ったソースコードそのまま組み込んだっぽいですね見た感じ

260:元99
19/10/25 14:57:42.75 V0o5IG+qM.net
>>252
まあ普通はコメントにするよね

261:デフォルトの名無しさん
19/10/25 22:28:16.88 7rgagi6Z0.net
List<(string, int)> list;があった場合、listの中からlist.item2が最大の要素(string, int)を得るにはどうすればいいのですか?
var l = list.Max(x=>x.Item2);みたいにしたいのですが、int型が帰ってきてしまいます

262:デフォルトの名無しさん
19/10/25 23:07:56.88 GWerdevt0.net
OrderByDescending.FirstOrDefault

263:デフォルトの名無しさん
19/10/25 23:14:44.18 5pdqBhsBa.net
>>262だと計算量のオーダーが増える
先に Max で最大のItem2 (maxItem2)を求めておいて list.First(x => x.Item2 == maxItem2) のほうがマシ

264:デフォルトの名無しさん
19/10/25 23:23:22.26 6061P7ry0.net
何度も呼ぶときウゼーから関数にしろよ

265:デフォルトの名無しさん
19/10/25 23:42:07.16 5pdqBhsBa.net
経験上、こういう汎用的すぎるユーティリティ関数を自作して多用するのはお勧めしない
個人開発ならいいけど、多人数での開発になると新しいメンバーとの間で記述方法に差異を有む原因になり、結果的に負債化していくんだよ
ダサくてもこういうのは毎回ベタに書いたほうがいい

266:デフォルトの名無しさん
19/10/25 23:48:20.10 FLPxIKHC0.net
最大値持ってるタプルが複数あったら?

267:デフォルトの名無しさん
19/10/25 23:50:57.19 j4bjfcPpd.net
>>266
逆にどうして欲しいの?

268:デフォルトの名無しさん
19/10/26 00:25:28.36 ZMkO6rZZ0.net
>>267
知らんがな

269:デフォルトの名無しさん
19/10/26 00:58:09.61 rff7tW+R0.net
>>262-265
どの方法も一見正攻法ではないように見えるため、人に教えてもらわないことには勇気を出して書けませんでした
ありがとうございます

270:デフォルトの名無しさん
19/10/26 12:56:29.17 D4rlG2Pr0.net
>>265
計算量のオーダー気にしてんだろ?
他の奴が違う書き方して増えたら大変じゃん
あ、どうでもよかった?

271:デフォルトの名無しさん
19/10/26 13:18:11.26 sfokePbj0.net
素直に
int max = list.Max(tuple => tuple.Item2);
var maxValueItems = list.Where(tuple => tuple.Item2 == max);
でいいじゃん
int に重複がない前提なら Dictionary 化した方が捗る

272:デフォルトの名無しさん
19/10/26 14:40:36.29 +20I9h0L0.net
なんかいいロガー知らない?
3つのテキストに警告・注意・情報がそれぞれ安全に吐けるロガー


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch