2013-10-15 45 views
0

我有一个项目,它由多种形式组成,并且希望以我无法实现的某些形式规则将其打开。模态和非模态形式的项目层次概念

首先,这里是主要形式 “Form1的”,然后 “Form11” 和 “Form111”, “Form12” 和 “form121”

从主窗体 “Form1的” 我只能启动形式 “Form11” 和“ Form12" 是这样的:

Public Class Form1 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Form11.Show() 
End Sub 

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 
    Form12.Show() 
End Sub 

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click 
    Me.Close() 
End Sub 
End Class 

在这种情况下,当‘Form11’和‘Form12’的表现,我可以很容易地通过按下将Button4的退出申请‘Form1的’什么将关闭所有形式。

现在,这里是另一种形式,“Form111”这是我通过点击“Form11”按钮打开模态...

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim f As New Form111 
    f.ShowDialog(Me) 
    f = Nothing 
End Sub 

在这里,我有我的项目的一些误会或误解。

当“Form111”打开时,我喜欢阻止“Form11”,而不是“Form1”,我想打开“Form2”或退出非模态形式为“Form11”的模式形式“Form111”被打开。

是否有可能通过所描述的项目配置实现此类功能?

+1

Project + Properties,将关闭模式设置更改为“最后一个窗体关闭时”。使用Application.Exit()强制应用程序退出。 –

+1

另外作为一个旁注,你应该做f.dispose而不是f = nothing。 – peterG

回答

1

首先,按钮在第一个块中单击的代码可能不正确。如果这些表格的名称是Form11Form12。他们应该像Form111一样进行实例化。

原因应用程序关闭是因为该窗体(Me)被设置为启动窗体。如果/关闭,该应用程序结束。当最后一个表单在项目属性中关闭时,您可以更改该应用程序以退出。

至于你的问题,要有一个对话框“阻止”"Form11" but not "Form1",答案是否定的。表格可以是Modal(您称之为“屏蔽”)或Modeless。你可以告诉Form111留在最前面,但它不会“阻塞”任何其他形式。

你试图做的事情表明,这些表单上的操作可能没有按照他们的需要进行组织或计划。

+0

我尽我所能解释更好,但我可以看到不够..我试图以逻辑和功能的方式组织项目。我想有Form1,它可以是我可以随时关闭应用程序的主窗体。 –

+0

我找到解决方案! Form111应该实例化并称为非模态(.Show(Me))。里面_Load Form111我应该做Me.Owner.Enabled = False和_FormClosing Me.Owner.Enabled = True。这样,当Form111(其行为像模态,但它不是)Form11被屏蔽,但与Form1同时,我可以关闭整个应用程序或从Form11和/或Form111关闭事件! ::快乐 –