2013-03-24 94 views
1

我想重置我的主表單,以便我可以輕鬆地重置所有文本框和變量。我在Progam.cs中添加了一個bool,以便在應用程序關閉並重新打開時保持打開狀態。當我試圖關閉它時,on_closing甚至會發生兩次。我不知道該怎麼做才能阻止它的發生,但我知道這應該是簡單的。關閉並重新打開表單而不關閉應用程序

的Program.cs:

static class Program 
{ 
    public static bool KeepRunning { get; set; } 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main(string[] args) 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 

     KeepRunning = true; 
     while (KeepRunning) 
     { 
      KeepRunning = false; 
      Application.Run(new Form1()); 
     } 

    } 
} 

Form1中:

private void button1_Click(object sender, EventArgs e) 
    { 
     Program.KeepRunning = true; 
     this.Close(); 
    } 

    private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     DialogResult dialogResult = MessageBox.Show("You have unsaved work! Save before closing?", "Save?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation); 
     if (dialogResult == DialogResult.Yes) 
     { 
      e.Cancel = true; 
      MessageBox.Show("saving then closing"); 
      Application.Exit(); 
     } 

     if (dialogResult == DialogResult.No) 
     { 
      MessageBox.Show("closing"); 
      Application.Exit(); 
     } 

     if (dialogResult == DialogResult.Cancel) 
     { 
      e.Cancel = true; 
      MessageBox.Show("canceling"); 
     } 
    } 
+0

@HansPassant ,我想說這肯定不是重複的,很可能是另一個重複的綜合徵病例。即使解決方案是相同的,這些問題也是不同的。 – 2013-03-24 01:48:19

+0

「關閉表單而不關閉應用程序」,完全相同的問題。 – 2013-03-24 01:51:27

回答

0

刪除您Application.Exit()。由於您已經在FormClosing事件處理程序中,因此如果Program.KeepRunning設置爲false,則應用程序將退出。

+0

如果我這樣做,然後點擊否,它永遠不會關閉。它只是重複打開後,你不反覆點擊。 – 2013-03-24 01:32:04

+0

我更新了我的答案,因爲我讀了你的問題一點點快速 – darthmaim 2013-03-24 01:34:56

+0

非常感謝,現在它是有道理的。 – 2013-03-24 01:40:59

0

發生這種情況是因爲您調用了Application.Exit()。由於您的表單尚未關閉,如果您嘗試關閉應用程序,那麼該指令將嘗試關閉表單拳頭,然後再次調用事件處理程序。

另外,我不認爲你需要Application.Exit(),因爲這是你的唯一形式和應用,因此會自動關閉(至少這是我的VB6發生了什麼事,人傑地靈!)

相關問題