1

次の機能を持つfrmMainという名前のフォームがあります。

public void openFullScreen(String id,String content)
{
    frmEditor Editor = new frmEditor();
    Editor.WindowState = FormWindowState.Maximized;
    Editor.Content = content;
    Editor.ID = id;
    Editor.ShowDialog();
}

Editor.cs では、次のコードを使用しています。

private void btnClose_Click(object sender, EventArgs e)
{
    Object content = browserEditor.Document.InvokeScript("getContent");
    if (content != null)
    {
        object[] args = new object[2];
        args[0] = content.ToString();
        args[1] = _id;
        AppDomain.CurrentDomain.SetData("EditorContent", args);
        this.Close();
        //browserEditor.Document.InvokeScript("setEditorContent",args)
    }
}

特定の値を表示する必要があることを知った上で、frmEditor が現在閉じられていることを frmMain伝えたいと思います。これを確認するにはどうすればよいですか?

4

3 に答える 3

6

FormClosedEditor インスタンスのイベントをサブスクライブするだけです。

private void InitializeChildForm()
{
    var child = new ChildForm();
    child.FormClosed += ChildFormClosed;
    child.ShowDialog();
}

void ChildFormClosed(object sender, FormClosedEventArgs e)
{
    MessageBox.Show("Child form was closed.");
}
于 2013-05-26T06:30:10.263 に答える
6

ShowDialogメソッドは、ダイアログが閉じられるまでブロックします。

このメソッドを使用して、アプリケーションでモーダル ダイアログ ボックスを表示できます。このメソッドが呼び出されると、その後のコードは、ダイアログ ボックスが閉じられるまで実行されません。ダイアログ ボックスには、フォームの Button の DialogResult プロパティに割り当てるか、フォームの DialogResult プロパティをコードで設定することにより、DialogResult 列挙の値の 1 つを割り当てることができます。この値は、このメソッドによって返されます。

結果を返すには、に組み込まれているDialogResultプロパティを設定できますForm。その型がニーズに合わない場合は、プロパティを宣言し、戻っEditorたときにそれを取得しShowDialogます。

public partial class Editor : Form
{
    public string YourReturnValue { get; private set; }

    private void btnClose_Click(object sender, EventArgs e)
    {
        // you code here...
        YourReturnValue = "Something you want to return";
    }
 }

次にopenFormで

public void openFullScreen(String id,String content)
{
    frmEditor Editor = new frmEditor();
    Editor.WindowState = FormWindowState.Maximized;
    Editor.Content = content;
    Editor.ID = id;
    Editor.ShowDialog( this );
    string retval = Editor.YourReturnValue;
}

注意すべき重要なことは、フォームが閉じられたからといって、オブジェクトが破棄されたことを意味するわけではないということです。Editor変数がスコープ内にある間は、引き続きアクセスできます。

余談ですが、所有者を ShowDialog に渡すことをお勧めします。

于 2013-05-26T06:31:56.187 に答える