私はForm1
という形式を持っていますが、私はそれをモーダル形式としてForm2
と表示しています。 Form2
から私はForm2
を閉じた後にForm1
に反映されるべき様々な値のセットの編集と削除を行う。だから私がするのはForm2
を閉じた後にRePopulateControls_in_Form1()
です。 RePopulateControls_in_Form1()
は長いプロセスなので、Form2
に何らかの変更(編集、追加、削除)が発生し、Form2
がオープンされ、閉じられていない場合にのみ、そのメソッドを実行したいと考えています。DialogResultはフォームを閉じませんか?
だから、これは私がForm1
でやろうものです:私は、
Form2 f = new Form2();
if (f.ShowDialog(this) == DialogResult.Something)
RePopulateControls_in_Form1()
そしてない
private void bntEdit()
{
//If Edit?
this.DialogResult = DialogResult.Something;
}
private void bntAdd()
{
//If Add?
this.DialogResult = DialogResult.Something;
}
private void bntDelete()
{
//If Delete?
this.DialogResult = DialogResult.Something;
}
しかし、私の問題は.Something
です。 .None
以外の場合、Form2
は単に閉じられます。私はForm2
がユーザーがそれを閉じるまでそれ自身で単に閉じることを望まない。
私はこれを行う場合:
RePopulateControls_in_Form1()
をヒットされていません!
私のプログラムでは、Form2
に値が変更された場合のみ、RePopulateControls_in_Form1()
を呼び出すようにコンパイラに指示することはできますか?
注:コントロールが動的に作成され、少し複雑(実際にはForm2
で作成されるのはGUIコントロールとそのラベルなどです)ので、再挿入が必要です。
私は最初の部分を取得しますが、2番目のロジックは適切なコーディング手法ではありません! – nawfal
なぜそうではありませんか?上記の場合、私はイベントを使用します。しかし、20の書式を持つアプリケーション全体で使用される値があり、その数の10倍の値がある場合、どのようにして1つの値しか使用されないようにしますか?フォームからフォームおよびクラスへの値をコンストラクタのパラメータまたはプロパティを介してクラスに渡すことをお勧めしますか? – ScruffyDuck
これは、Form1にForm2について何か知らせるフラグを設定するだけの簡単なものです。なぜスレッドセーフではないグローバル変数ですか?上記のように220のクラスに渡って使用する必要がある場合、一般的なグローバル変数の重要性を理解しています。しかし、ここでは、アプリケーションのライフサイクル全体を通して眠っている静的変数をできるだけ避けるべきであるだけでなく、もっと重要なことに、私の簡単な質問から220の授業で雇用されるように大きい: – nawfal