C#winform判断子窗口是不是已关闭或在关闭的时候触发事件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#winform判断子窗口是不是已关闭或在关闭的时候触发事件相关的知识,希望对你有一定的参考价值。

怎么样判断C#winform怎么判断窗口是否已经关闭或在关闭窗口的时候可以触发一个什么事件。

private void MainForm_FormClosing(object sender, FormClosingEventArgs e)

if (MessageBox.Show(this, "确认关闭?",
"提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)

ArrayList alist = new ArrayList();
alist.Add("newCODDemo.exe");
alist.Add("newCODDemo.vshost.exe");
for (int i = 0; i < alist.Count; i++)

if (System.Diagnostics.Process.GetProcessesByName(alist[i].ToString()).Length <= 0)

try

//System.Diagnostics.Process.Start(processName);
System.Diagnostics.Process.GetCurrentProcess().Kill();

catch

MessageBox.Show(this, "关闭向导出错", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);






注册FormClosing事件,既然关闭了窗体,那相关进程也要关掉。免得一直占用内存资源。
参考技术A 关于窗口关闭事件有两个,一个是关闭后的closed和关闭中的closing!前者应该可以实现子窗体关闭向父窗体发送或设置一个值作为窗口关闭的通知,后者通常是用来做个关闭询问的功能,可取消窗口关闭 参考技术B private
void
MainForm_FormClosing(object
sender,
FormClosingEventArgs
e)

if
(MessageBox.Show(this,
"确认关闭?",
"提示",
MessageBoxButtons.OKCancel,
MessageBoxIcon.Warning)
==
DialogResult.OK)

ArrayList
alist
=
new
ArrayList();
alist.Add("newCODDemo.exe");
alist.Add("newCODDemo.vshost.exe");
for
(int
i
=
0;
i
<
alist.Count;
i++)

if
(System.Diagnostics.Process.GetProcessesByName(alist[i].ToString()).Length
<=
0)

try

//System.Diagnostics.Process.Start(processName);
System.Diagnostics.Process.GetCurrentProcess().Kill();

catch

MessageBox.Show(this,
"关闭向导出错",
"提示",
MessageBoxButtons.OK,
MessageBoxIcon.Information);





注册FormClosing事件,既然关闭了窗体,那相关进程也要关掉。免得一直占用内存资源。
参考技术C 不需要api,不过你hide可不是关闭,只是隐藏了而已。你可以这样
bool
isopen=false;
foreach
(form
childrenform
in
this.mdichildren)

if
(childrenform.name=="fathername")//这里对你来说应该是form2

childrenform.visible
=
true;//如果你要求关闭的话就只要close就可以了,我现在是如果存在就显示,你可以参考一下,你也可以不
childrenform.activate();
isopen
=
true;
return;


if
(!isopen)

frmsetproduct
productset
=
new
frmsetproduct();
productset.mdiparent
=
this;
productset.windowstate
=
formwindowstate.maximized;
productset.show();

双击打开一个新的winform并关闭调用者窗口

【中文标题】双击打开一个新的winform并关闭调用者窗口【英文标题】:Open a new winform by doubleclick and close the caller window 【发布时间】:2013-10-06 19:57:07 【问题描述】:

我有一个名为Form1 的C# winform,这个winform 有一个列表和一个按钮。 我在按钮中添加了一个click() 事件,在列表中添加了一个doubleclick() 事件。 两个事件都调用相同的方法:(在 form1.designer.cs 中)

this.myList.DoubleClick += new System.EventHandler(this.myMethod);
this.myButton.Click += new System.EventHandler(this.myMethod);

myMethod,我想做如下操作:

    打开一个类型为Form2 的新winform,并将其设为活动的winform。

    关闭调用方winform(类型为Form1),不再需要此表单。

我是这样做的:(在 form1.cs 中)

private void myMethod(object sender, EventArgs e)

     Form2 frm = new Form2();                 
     this.dispose();

myMethod被列表双击事件调用时,当myMethod结束时,出现空指针异常。 当它被按钮点击事件调用时,它可以正常工作。

我也尝试了this.close(),并得到了相同的行为。

我的问题:

    我应该如何正确编写myMethod,这样它才能对按钮单击事件和列表双击事件进行所需的操作?

    按钮和列表有什么区别?为什么按钮可以正常工作,但列表会崩溃?

谢谢

【问题讨论】:

调用表单真的关闭了吗? 您应该调用 Form.Close 方法,而不是 Dispose。 msdn.microsoft.com/en-us/library/… 我试过这个。也关闭,同样的问题。 neoistheone,form1 实际上正在关闭。在我看来,这可能是例外的原因。但我不明白按钮点击效果如何。 这是真正的代码吗?是否在其他地方引用了 Form1 的实例? 【参考方案1】:

您可以隐藏Form1 并显示Form2。这会引发一些问题,例如关闭 Form2 不会关闭Form1

this.Hide();
var form2 = new Form2();
form2.ShowDialog();

【讨论】:

以上是关于C#winform判断子窗口是不是已关闭或在关闭的时候触发事件的主要内容,如果未能解决你的问题,请参考以下文章

C# winform 父窗口子窗口按钮控制

C# WinForm中,如何判断窗口已打开

c# winform程序,判断是不是打开同一个窗口的问题。

高难的WINFORM问题在窗体里点击关闭按钮把窗体隐藏而不是关闭

C#winform 有关判断进程的问题

WINFORM如何关闭主窗口?