6

モーダルフォームとしてForm1表示するフォームがあります。Form2私は、クローズ後Form2に反映されるべきさまざまな値のセットのあらゆる種類の編集と削除を行います。だから私がすることは、閉じた後です。は長いプロセスなので、そのメソッドを実行したいのは、変更 (編集、追加、削除) が発生した場合のみであり、開いたり閉じたりしたときではありません。Form1Form2RePopulateControls_in_Form1()Form2RePopulateControls_in_Form1()Form2Form2

だから、これは私がやろうとしていることですForm1:

        Form2 f = new Form2();
        if (f.ShowDialog(this) == DialogResult.Something)
            RePopulateControls_in_Form1()

そして Form2 では、

    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. 以外の場合は.NoneForm2単純に閉じます。Form2ユーザーが閉じない限り、単純に閉じたくありません。

私がこれを行う場合:

    //in Form1
    private void Form1_Click()
    {
        Form2 f = new Form2();
        if (f.ShowDialog(this) == DialogResult.None)
            RePopulateControls_in_Form1()
    }

    //in Form2
    private void Form2_SomeModification()
    {
        //If Modified?
        this.DialogResult = DialogResult.None;
    }

RePopulateControls_in_Form1()ヒットしません!

要するに、私のプログラムでは、RePopulateControls_in_Form1()値が変更された場合にのみ呼び出すようにコンパイラに指示するにはどうすればよいForm2ですか?

注: コントロールは動的に作成され、少し複雑であるため (実際にForm2は、GUI コントロールとそのラベルなどで作成されます)、再設定が必要です。

4

3 に答える 3

11

Form に DialogResult を設定すると、フォームが非表示になり、ShowDialog から戻ります。ユーザーが他のアクション (フォームを閉じるなど) を実行するまでそれを遅らせたい場合は、その状態をメンバー フィールドとして保存し、DialogResult を Form.Closing のハンドラーに設定する必要があります。

また、ボタンを押してモーダル フォームを閉じたい場合は、Button.Click ハンドラーを作成する代わりに、Button.DialogResult プロパティを使用できます。

于 2011-07-30T05:48:45.333 に答える
2

簡単な方法は、DialogResult をまったく使用しないことですが、フォームの動作に干渉しない専用のプロパティを使用することです。- その後、任意のロジックをプログラムできるはずです。

于 2011-07-30T05:55:03.963 に答える
0

Form 2 でイベントを使用します。Form2 が閉じているときにそのイベントを発生させます。Form1 でそのイベントを処理すると、必要な処理を実行できます。さらに、必要に応じて、Form2 から Form1 の情報をパラメーターでイベントに戻すことができます。

別の方法は、グローバル静的変数を設定することです-おそらく単なるブール値です。次に、Form2 は、変更が行われたかどうかに応じて、true または false に設定できます。Form1 は Form2 が戻ったときにこれを読み取ることができ、true の場合は処理を実行して false に戻します。

于 2011-07-30T05:50:40.960 に答える