我很困惑如何使窗體可見。當我們創建Windows窗體應用程序時,即使沒有顯式調用Show方法,默認的Form1也會自動可見。但是,如果我們想顯示另一個窗體並使其可見,我們必須通過調用Show來使其可見。Windows窗體可見性問題
任何想法,爲什麼有這樣的差異?
我正在使用VSTS 2008 + C#+ .Net 2.0。
我很困惑如何使窗體可見。當我們創建Windows窗體應用程序時,即使沒有顯式調用Show方法,默認的Form1也會自動可見。但是,如果我們想顯示另一個窗體並使其可見,我們必須通過調用Show來使其可見。Windows窗體可見性問題
任何想法,爲什麼有這樣的差異?
我正在使用VSTS 2008 + C#+ .Net 2.0。
這是因爲Form1將是應用程序的主要形式。具體而言,它將傳遞給Application.Run
方法,該方法將創建一個ApplicationContext
對象,並將Form1指定爲主窗體。當應用程序啓動時,它會檢查ApplicationContext
是否具有主窗體,如果是,則該窗體的Visible
屬性將設置爲true
,這會導致窗體顯示。
或者,代碼表示,這是Application.Run
:
public static void Run(Form mainForm)
{
ThreadContext.FromCurrent().RunMessageLoop(-1, new ApplicationContext(mainForm));
}
RunMessageLoop
會調用另一個內部功能設置消息循環,並在該功能我們發現如下:
if (this.applicationContext.MainForm != null)
{
this.applicationContext.MainForm.Visible = true;
}
這是Form1顯示的內容。
這也給出瞭如何採取行動來防止Form1窗體在啓動時自動顯示的提示。所有我們需要做的是找到一種方法,而無需Form1的分配爲主要形式的ApplicationContext
啓動應用程序:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// create the form, but don't show it
Form1 form = new Form1();
// create an application context, without a main form
ApplicationContext context = new ApplicationContext();
// run the application
Application.Run(context);
}
看看VS爲您生成的文件「Program.cs」。
static class Program {
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1()); // and especially this line :)
}
}
因爲form1是由Application.Run(new form1())調用的主要窗體;
您會在program.cs文件中找到此代碼,您可以更改爲任何形式。
艾哈邁德,如果我新的另一種形式,並通過使用Form2 form2 = new Form2()構造它,form2永遠不會顯示。我認爲代碼與VSTS在Program.cs中爲我生成的代碼相同,我不知道Form2爲什麼不顯示? – George2 2009-07-15 07:19:41
嗨Stormenet,我沒有找到顯示從你引述的代碼調用。還有什麼提示? – George2 2009-07-15 07:11:26
Application.Run將爲您調用Show。 基本上這條線告訴你的應用程序的初始表單是Form1。如果你想顯示另一個啓動表單,只需更改該行。 – Stormenet 2009-07-15 12:06:05