2015-10-16 3 views
5

Ich habe eine winforms-Anwendung. Ich habe mehrere Formulare in dieser Anwendung (ein Hauptformular und mehrere spezialisierte Formulare), und auf nur einem Formular werden Klickereignisse für keine meiner Schaltflächen ausgelöst.Winforms Klicken Sie auf Ereignis nicht abfeuern

Es ist nicht so, dass der Code im Handler defekt ist. Dies kann dadurch festgestellt werden, dass beim Klicken auf den Button niemals ein Haltepunkt in der ersten Zeile des Handlers erreicht wird.

Andere Ereignisse funktionieren (Ich verwende CheckedChanged Ereignisse in diesem Formular und sie verhalten sich).

Meine Teammitglieder haben überprüft, und können auch nicht das Problem erkennen. Hier

ist eine vereinfachte Ansicht mein Code:

Designer generierter Code

partial class MyForm 
{ 
    private System.Windows.Forms.Button addButton; 

    private void InitalizeComponent() 
    { 
     this.addButton = new System.Windows.Forms.Button(); 
     this.addButton.Name = "addButton"; 
     // Drawing statements here 
     this.addButton.Click += new System.EventHandler(this.addButton_Click); 

     this.Controls.Add(this.addButton); 
    } 
} 

My-Code

public partial class MyForm : Form 
{ 
    public MyForm() 
    { 
     InitializeComponent(); 
    } 

    private void addButton_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show("The debugger is not reaching a break point on this line"); 
    } 
} 

Edit: Weitere Informationen von Testing

Es gibt mehrere Dropdown-Listen in meiner Form. Ich habe festgestellt, dass das Klickereignis nur dann fehlschlägt, wenn ich zuerst eine Auswahl in einer Dropdown-Box getroffen habe.

Wenn ich keine Auswahl mache, wird der Unterbrechungspunkt im Handler der Schaltfläche ausgelöst. Sonst nicht. In diesen Dropdown-Listen sind keine Ereignisse registriert.

+1

gibt es einen anderen Code in Ihrem Formular was entfernt die Verdrahtung zwischen Event & Handler nachdem 'InitializeComponent' aufgerufen wurde? – Kapoor

+1

Können Sie sich ein Beispiel für etwas vorstellen, das das kann? Ich werde jetzt einen Blick darauf werfen, aber ich weiß nicht, wonach ich suchen sollte, um diese Verdrahtung rückgängig zu machen. –

+1

Ist Ihre Schaltfläche aktiviert? –

Antwort

6

Wie Sie in Ihrem Beitrag erwähnt:

Das Problem ist nicht mit der Taste Ereignissen, aber mit der Form , nachdem Sie eine Auswahl aus einem Drop-Down-Box gesperrt werden.Hier

ist der Grund:

Wenn Datenbindung verwenden, wenn Sie einen Wert in einem Datengebundenen Steuerelement eingeben, es erste Eingabe zu bestätigen versucht, und dann, wenn der Eintrag gültig war, Datenbindung Wille Setzen Sie den Wert in die Datenquelle, aber wenn ein Validierungsfehler auftritt, gibt die Validierung false zurück und Ihr Steuerelement wechselt in den ungültigen Modus.

Wenn ein untergeordnetes Steuerelement des Formulars nicht validiert wurde, können Sie den Fokus standardmäßig nicht von ungültigem Steuerelement ändern.

Klicken Sie auf eine Schaltfläche standardmäßig verursacht Überprüfung des Steuerelements, die den Fokus verlieren, so dass Sie nicht auf Schaltfläche klicken können, wie Sie Ihre Schaltfläche zu Maus sehen, aber nicht tatsächlich klicken.

Sie können ein solches Verhalten einfach simulieren, indem Sie Validating Ereignis einer TextBox behandeln und e.cancel = true setzen. Hier

ist fix:

Sie dieses Verhalten mit Hilfe dieser Optionen beheben:

  • Set CausesValidation Eigenschaft Ihrer Taste false
  • Set AutoValidate Eigenschaft des Formulars zu AutoValidate.EnableAllowFocusChange
+0

Danke, das hat mir ein volles Verständnis davon gegeben, was den Fehler produziert hat. Ich hatte es geschafft, es zu reparieren, ohne zu verstehen, warum es kaputt war oder warum es jetzt repariert wurde. –

+0

Gern geschehen :) –

0

Dadurch wird der Trick für Sie tun

ändern

public ScheduleMeeting() 
{ 
    InitializeComponent(); 
} 

zu

public MyForm() 
{ 
    InitializeComponent(); 
} 
+1

Wie kompiliert 'public ScheduleMeeting()' in dieser Klasse? Seltsam ist es. – shahkalpesh

+0

@shahkalpesh: Ich stimme dir zu –

+0

Es tut mir sehr leid, es war etwas, das ich vergessen habe zu ändern, während ich meinen Code kopieren und vereinfachen für die Frage. In meinem tatsächlichen Code wird die Klasse "ScheduleMeeting" genannt, aber für dieses Beispiel habe ich es umbenannt "MyForm" –

1

ich die Frage nach weiteren Tests entdeckt haben.

I das Problem ist nicht mit Button-Ereignisse, aber mit dem Formular blockiert nach einer Auswahl aus einer Dropdown-Box.

Ich habe noch nicht herausgefunden, warum das Formular blockiert nach dem Dropdown ausgewählt ist (es hat keine Ereignisse, hat aber Datenbindung, so dass es einige mögliche Ursachen gibt).

Vielen Dank für Ihre Hilfe!

+0

Ich legte den Grund basierend auf Ihrer Antwort. Hoffe, Sie finden es hilfreich :) –