2010-12-06 77 views
1

我正在開發一個winforms中的個人項目,只是爲了獲得一些經驗,因爲我從來沒有機會使用它。所以,當談到Winforms時,我已經達到了n00b。這是我遇到的錯誤:Winform出現兩次

在窗體BudgetTracker中,我有一個名爲'AddCat'的按鈕。下面是窗體的構造和按鈕的點擊事件處理程序:

 public form_BudgetTracker() 
     { 
      InitializeComponent(); 
      setEvents(); 
     } 

     public void setEvents() 
     { 
      this.btn_AddCat.Click += new System.EventHandler(this.btn_AddCat_Click); 
     } 

     private void btn_AddCat_Click(object sender, EventArgs e) 
     { 
      form_NewCat NewCatForm = new form_NewCat(); 
      var NewCatFormResult = NewCatForm.ShowDialog(); 
      NewCatForm.Show(); 
     } 

在出現的NewCat形式,我有一個取消按鈕。代碼:

 public form_NewCat() 
     { 
      InitializeComponent(); 
      SetEvents(); 
     } 

     private void SetEvents() 
     { 
      this.btn_Add.Click += new System.EventHandler(this.btn_Add_Click); 
      this.btn_Cancel.Click += new System.EventHandler(this.btn_Cancel_Click); 
     } 

     private void btn_Cancel_Click(object sender, EventArgs e) 
     { 
      this.Close(); 
     } 

我面對的問題是,當我點擊添加,新的窗體出現。此時,如果我單擊取消,表單將消失,但立即出現表單的新實例。然後我再次點擊取消,表格消失。 我的代碼的一部分是使表單出現兩次。我檢查了構造函數等,但無法弄清楚。任何幫助或指針,將不勝感激。

PS - 正如我所提到的,我是winforms編程的新手,所以任何線索或指針都會被讚賞。

回答

6
private void btn_AddCat_Click(object sender, EventArgs e) 
{ 
    form_NewCat NewCatForm = new form_NewCat(); 
    var NewCatFormResult = NewCatForm.ShowDialog(); // <-- opens the first time 
    NewCatForm.Show();        // <-- opens the second time 
} 
+0

啊,好的。這將解釋它。萬分感謝。 – xbonez 2010-12-06 22:42:19

1

嘗試使用F8鍵而不是運行它,或者按F5來逐步執行代碼。它會一行一行地告訴你將要執行的內容。

2

從您的代碼判斷,您只是簡單地顯示兩次表單!

 form_NewCat NewCatForm = new form_NewCat(); 
     var NewCatFormResult = NewCatForm.ShowDialog(); 
     NewCatForm.Show(); 

第二行示出了的形式和塊,直到所述的DialogResult方法設置,然後在第三行示出了而不阻塞方法形式。

只需刪除第三行!

1

delete NewCatForm.Show();