如何在关闭Form2时立即调用Form1中的操作

时间:2016-06-15 14:31:34

标签: c# winforms

基本上我有Form1

从Form1我可以使用以下代码打开Form2

    private void btn_Komplexity_Click(object sender, EventArgs e)
    {
        Form2 kompleksaForma = new Form2();
        kompleksaForma.ShowDialog();
    }

当打开Form2时会有一些东西,最后会有this.Close();

this.Close();之后(关闭Form2)是否可以在Form1上调用即时操作?

3 个答案:

答案 0 :(得分:3)

如果您坚持使用ShowDialog(),此函数将一直阻止,直到表单关闭。

private void btn_Komplexity_Click(object sender, EventArgs e)
{
     using (Form2 kompleksaForma = new Form2())
     {
         kompleksaForma.ShowDialog();
         PutStuffHereAfterClose();  // (or outside the using block if it doesn't need
                                    //  to access properties of kompleksaForma)
     }
}

答案 1 :(得分:0)

窗口关闭后会触发一些事件。您可以订阅它们并将代码添加到处理程序方法:

Sub Macro87()
    Set Rng = Range("A1:D10000")
    For Each cel In Rng
        If InStr(1, cel.Value, "Release Date:\n ") > 0 Then
            Cells(cel.Row(), 6) = cel.Value
            cel.Value = Empty
        End If
    Next cel
End Sub

然后实现其中一个处理程序:

Form2 kompleksaForma = new Form2();

kompleksaForma.FormClosing += KompleksaForma_FormClosing;
kompleksaForma.FormClosed += KompleksaForma_FormClosed;
kompleksaForma.Deactivate += KompleksaForma_Deactivate;

kompleksaForma.ShowDialog();

首先会触发private void KompleksaForma_FormClosing(object sender, FormClosingEventArgs e) { // Your code here } private void KompleksaForma_FormClosed(object sender, FormClosedEventArgs e) { // or here } private void KompleksaForma_Deactivate(object sender, EventArgs e) { // or here } ,然后触发FormClosing。最后一个是FormClosed

答案 2 :(得分:0)

如果您使用form2.ShowDialog()form2.ShowDialog(this)将Form2显示为模式窗口,那么......

form2.ShowDialog(this);
if (form2.DialogResult == DialogResult.OK)
{
    CallOtherStuffHere();
}

...因为ShowDialog()方法将阻止执行,直到关闭Form2,然后继续。

我使用上面的DialogResult来测试有效性,但如果你愿意,你可以实现其他一些方法。

如果您将Form2显示为非模态窗口,则应首先将Form1的引用传递给Form2。这可以在它的构造函数中完成......

var form2 = new Form2(form1);

或者,您可以在Show()方法中传递它,将form1设置为其父...

var form2 = new Form2();
form2.Show(form1);

然后,您可以通过form2.Parent访问父窗体。但是,在显式调用方法之前,可能必须将其强制转换为Form1实例。这可以在Form2的Closing事件处理程序中完成。

此处有关模态和无模式窗口的更多信息: https://msdn.microsoft.com/en-us/library/aa984358(v=vs.71).aspx