2010-05-21 69 views
0

我有主窗体和一些其他窗体,可以显示控件,放置在主窗体上,使用ShowDialog(控件)。另外我在主窗体上有事件处理程序,可以随时处理。我怎样才能在里面检查,有没有其他的对话框形式?检查窗体的子窗体 - C#

回答

0

如果我正确理解你的问题,我建议你检查每个窗体的form.visible。

This可以帮助你

+0

但我不能获得积极的形式,并将其与主?它会解决我的问题。 – fadimko 2010-05-21 05:26:19

+0

检查更新的答案。 – Ram 2010-05-21 05:46:46

+0

我下次会看完男人,谢谢 – fadimko 2010-05-21 06:01:04

0

如果我正确理解你,你问是否在你的主窗体的事件处理程序中,你可以检查是否有任何其他窗体是打开的。

如果您使用ShowDialog显示这些表单,那么您的主窗体的线程将被阻止,直到新窗体关闭。我相信在此期间发生的任何事件都会等待,并在表格结束后予以处理。

如果您使用Show显示这些表单,那么您需要保留一些对表单的引用,以便在您的事件处理程序中检查它们。

如果你的问题更清楚一点,或许我可以帮到更多。

+0

对不起,我有一些英语问题。 我的事件处理程序处理来自另一个静态类的事件(我的应用程序是多线程的,我使用这个静态类作为共享内存)。所以它可以随时调用,就像简单的方法一样。或者可能是我错了? – fadimko 2010-05-21 04:54:07

+0

如果你是多线程的,那么我相信这是可能的,正如你所描述的那样。像Ram说的,你可以使用'form.visible'。确保你有正确的线程安全预防措施,并确保将表单的实例保存在你可以在你的处理程序中访问的地方。也就是说,如果你只是调用'(new MyDialog())。ShowDialog()'你将无法在稍后检查它的可见性。 – dlras2 2010-05-21 17:09:43

+0

不,dlras2,主窗体的线程没有被阻塞。在子窗体关闭之前,ShowDialog调用不会返回,但线程仍在处理事件(即Windows消息处理正在运行)。在子窗体中触发的任何事件都可能导致主窗体中的代码运行。无论应用程序是否为多线程,情况都是如此。例如:子表单有一个引发公共事件的按钮。主窗体为该事件附加一个处理程序。现在,无论何时单击按钮,即使在可见子项时,也会执行主窗体的处理程序。 – ricovox 2014-05-29 19:13:03

0

你可能想看看Application.OpenForms。你可以看看收藏。

+0

谢谢。我忘了查看应用程序属性。 – fadimko 2010-05-21 05:45:14