基本上我有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上调用即时操作?
答案 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