2010-12-06 75 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();