在我的節目我秀的主要形式之前登錄表單,一旦程序檢測登錄成功我用這個:C#打開一個新的形式和關閉另一個
MainForm Main = new MainForm();
Main.Show();
this.Hide();
這工作得很好,但有一個問題,登錄表單仍然是開放的,即使它是隱藏的,所以當程序關閉時,進程仍然掛起,我怎麼能阻止這種情況發生?
對不起,忘了添加,使用this.Close();
不起作用,會完全關閉程序。
在我的節目我秀的主要形式之前登錄表單,一旦程序檢測登錄成功我用這個:C#打開一個新的形式和關閉另一個
MainForm Main = new MainForm();
Main.Show();
this.Hide();
這工作得很好,但有一個問題,登錄表單仍然是開放的,即使它是隱藏的,所以當程序關閉時,進程仍然掛起,我怎麼能阻止這種情況發生?
對不起,忘了添加,使用this.Close();
不起作用,會完全關閉程序。
您需要在應用程序開啓時指定您的MainForm
,並在此表單的Load
事件處理程序中請求登錄。在這種情況下,你已經在拼命地跑開始應用和Login
爲:
Program.cs的
Application.Run(new MainForm());
MainForm.cs
private void Form1_Load(object sender, EventArgs e)
{
LoginForm loginForm = new LoginForm();
if (loginForm.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
// check login here
}
}
附:如果它是你應用程序的主要形式,那麼Close
將完全關閉你的應用程序。在登錄處理
static class Program
{
public static ApplicationContext Context { get; set; }
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Context = new ApplicationContext(new LoginForm());
// pass Context instead of just new LoginForm()
Application.Run(Context);
}
}
然後在:
如果隱藏的MainForm在它的負載事件顯示登錄表單之前,您將更密切地複製首先打開登錄表單的用戶功能。 – Servy
this.Close()
怎麼辦?
將主窗體更改爲MainForm
,並且當應用程序啓動時,在您的MainForm_Load
啓動登錄窗體中作爲對話框,使他們無法訪問主窗體。
Application.Exit(0);
SetVisibilityCore
,並調用它內MainForm_Load
。嘗試更多的東西是這樣的:
this.Hide();
Main.ShowDialog();
this.Close();
你想隱藏的登錄表單顯示您的對話框之前,然後關閉登錄表單對話框關閉後。
簡單地關閉登錄對話框最終會結束應用程序,所以這不是一個真正的解決方案,但你仍然想隱藏登錄。
簡而言之,請按照您希望他們進入的順序進行操作,特別是在處理消息循環時。
首先,您隱藏登錄表單。
接下來,您將顯示主窗體對話框,但阻止「ShowDialog()」的調用者繼續,直到對話框關閉。
最後,關閉對話框後,關閉登錄表單,結束應用程序。
您可以使用ApplicationContext.MainForm
指定當前主要形式爲應用程序
private void login_Click(object sender, EventArgs e)
{
Program.Context.MainForm = new MainForm();
// close login form
this.Close();
// set up context to track main form instead of login
Program.Context.MainForm.Show();
}
嘗試this.close() –