2010-12-06 12 views
1

Ich arbeite an einem persönlichen Projekt in Winforms, nur um einige Erfahrung darin zu sammeln, da ich nie die Chance hatte, damit vorher zu arbeiten. Also, ich bin ziemlich das n00b, wenn es um Winforms geht. Dies ist der Fehler, dem ich begegne:Winform erscheint zweimal

Im Formular BudgetTracker habe ich einen Button namens 'AddCat'. Im Folgenden finden Sie den Konstruktor der Form und der Klick Eventhandler der Schaltfläche:

 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(); 
     } 

In der NEWCAT Form, die aufkommt, habe ich eine Schaltfläche Abbrechen. Code:

 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(); 
     } 

Das Problem, das ich mit Blick auf bin ist, wenn ich hinzufügen klicken, wird die neue Form kommt. Wenn ich jetzt auf Abbrechen klicke, verschwindet das Formular, aber sofort erscheint eine neue Instanz des Formulars. Ich klicke dann erneut auf Abbrechen und das Formular verschwindet. In welchem ​​Teil meines Codes wird das Formular zweimal angezeigt? Ich überprüfte die Konstruktoren usw., konnte es aber nicht herausfinden. Jede Hilfe oder Hinweise würden geschätzt werden.

PS - Wie ich bereits erwähnt habe, bin ich neu in der Programmierung von Winforms, also würden auch alle Cues oder Zeiger geschätzt werden.

Antwort

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

ah, ok. Das würde es erklären. Danke vielmals. – xbonez

1

Versuchen Sie, mit der F8-Taste durch den Code zu gehen, statt ihn auszuführen, oder drücken Sie F5. Es wird Ihnen Zeile für Zeile zeigen, was es auszuführen hat.

2

Nach Ihrem Code zu urteilen, zeigen Sie einfach das Formular zweimal !!!

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

Die zweite Zeile zeigt die Form und blockiert das Verfahren bis zum Dialogresult gesetzt ist, dann ist die dritte Zeile zeigt die Form ohne das Verfahren zu blockieren.

Einfach die dritte Zeile entfernen!

1

löschen NewCatForm.Show();