2012-01-24 176 views
0

VB Windows窗体应用程序..我正在开发一个程序的哪个部分是围绕配置设置允许用户输入配置项的应用程序。当在主窗体上单击配置菜单的菜单栏项时,菜单打开。这很好,但是在配置菜单关闭之前,mainform不应该变为活动状态。这种情况现在不会发生,mainform只是进入前台,配置表单进入后台......我意识到编写Child表单上的事件来处理这种情况将不起作用,因为子窗口失去控制,主形成收益控制..我想在主表单上编写一个函数如下,但它似乎不合逻辑,因为我必须为它添加每个表单,并在试图关闭它之前检查以确保孩子实际打开。 。父窗口获取焦点时窗口窗体自动关闭

Private Sub Form1_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.GotFocus 
    MailSettingsWindow.Close() 
    RentalSettingsWindow.Close() 

End Sub 

我废除了上述子程序,并用下面的代码按使用的ShowDialog其工作原理就像我一直在寻找的recomendation。

Private Sub MailingAndEmailSettingsToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MailingAndEmailSettingsToolStripMenuItem.Click 
    Dim MailConfig As New MailSettingsWindow() 
    MailSettingsWindow.Showdialog() 
End Sub 
+0

改变重点应该是一个**无损**行动。请记住,Windows是一个多任务操作系统,用户期望能够完成多任务。如果你的应用程序工作方式不同*,他们会感到困惑,迷失方向,并可能会责怪你,即使你的模式是“更好”或“创新”。用户应该能够将焦点设置到应用中的另一个窗口,而不会丢失屏幕上的信息或随机关闭的内容。除非他们特别关闭窗户,否则不要关闭窗户。 –

+0

可以理解..但是如果用户进入应用程序的配置窗口,他们不应该能够打开该窗口,并且仍然能够使用该应用程序,直到他们进行了更改并保存它们,或者只需单击关闭按钮或取消按钮。 – Skindeep2366

+0

所以,你必须阻止父窗体,直到设置窗口关闭? – Jaxedin

回答

2

我废除了上述子程序,并用下面的代码按使用ShowDialog其工作原理就像我一直在寻找的建议。

我的代码如下:

Private Sub MailingAndEmailSettingsMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles MailingAndEmailSettingsMenuItem.Click 
    Dim MailConfig As New MailSettingsWindow() 
    MailSettingsWindow.ShowDialog() 
End Sub