WindowsForm(C#)について質問です。
サブフォームからメインフォームに値を渡すやり方を調べていたところ、サブフォームからメインフォームへ情報を受け渡す場合、サブフォームはメインフォームのインスタンスを保持していない為、メインフォームのインスタンスをサブフォームの変数に渡さなければならないという記事を見つけたのですが、staticでメインフォームの変数を静的にしてもサブフォームから値を渡すことができたので、後者のやりかたでやっても問題ないのでしょうか?
C#
1public partial class Form1 : Form 2{ 3 private static Boolean a; 4 5 private void button1_Click(object sender, EventArgs e) 6 { 7 Form2 form2 = new Form2(); 8 9 if (!a) 10 { 11 form2.Show(); 12 } 13 a = true; 14 } 15 16 public Boolean A 17 { 18 get { return a; } 19 set { a = value; } 20 } 21 22 23 24public partial class Form2 : Form 25{ 26 private void button1_Click(object sender, EventArgs e) 27 { 28 Form1 form1 = new Form1(); 29 form1.A = false; 30 } 31
その記事の方法も良いとは言えないけど、それで問題が起きなきゃ問題ないんじゃないですか?
> staticでメインフォームの変数を静的にしてもサブフォームから値を渡すことができたので
その簡単なサンプルコードを質問欄に書くと、こうした方が良いとか、こういう方法もあるとかのレスがもらえるかもしれません。
Form2 に Form1 への参照を保持する変数と、Form を引数に取るコンストラクタを追加して、Form1 で Form2 を new する際、Form1 の参照を渡してはいかがですか?
private static Boolean a;
ここでstaticにすれば一応参照はできているのですが、やはりnewする際にインスタンスを渡したほうがいいのでしょうか?
「後者のやりかたでやっても問題ないのでしょうか?」というのはどういう趣旨の質問?
あなたの用途でそれでテストして問題ないなら他人がどうこう言えるものじゃないけども、テストしないつもり?
それとも問題のあるケースが既に想定されている?
あなた自身が問題を把握していないのに漠然と質問するのはこのサイトの趣旨に反するけども。
https://teratail.com/help/question-tips
https://teratail.com/help/avoid-asking
テストした結果問題がなかったのですが、ネットで調べてもインスタンスを渡すやり方しか出てこなかった為、C#初心者なので本当にこの実装の仕方で理解していいのか質問させていただきました。初投稿ということもありガイドラインに違反した質問だとは思いませんでした。以後気を付けます。
設計がいいか悪いかは、自身が判断するべき事だと思います。
デザインパターン系の書籍や記事を読まれるのがよいのではないでしょうか。
このサイトでは初心者である(ので質問の不備を大目に見て欲しい)旨を伝えたいなら質問に初心者マークを付ける事ができるようになっており、逆にそれが無いのに頓珍漢な質問をしてると、何を言ってるんだ?という反応なるのはある意味当然なんで、せめてサイトの使い方ぐらいは調べてから投稿したほうが良い。
ベストプラクティスを質問したいのならそう書くべきだし、「誰にとってのどんな問題なのか」の基準を示さず「問題ないのでしょうか?」と質問されても回答は不可能。
というかまぁ、あなたが本質的に必要としているのは「先生」なんだろう。
質問内容が一問一答で答えられる範囲を超えてる。
「○○の場合はこうで~」など、回答者が先回りして手取り足取り教えてもらえると思わない方が良い。
ここは技術的な問題に直面した際にフラットな立場でQ&Aをする場であって、学校の代わりじゃない。
そういう先生役が欲しいなら、職場の同僚や教育担当者(学生なら教師や友人)に頼んだり、技術者系のコミュニティ(フォーラムやDiscordグループ等)に参加したほうが良い。
回答2件
あなたの回答
tips
プレビュー