2013-10-15 78 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關閉事件! ::快樂 –