2015-10-16 16 views
5

Ho un'applicazione winforms. Ho diverse forme in questa applicazione (un modulo principale e diversi moduli specializzati) e su un solo modulo, gli eventi click non sparano per nessuno dei miei pulsanti.Winforms Fare clic su Evento non attivato

Non è che il codice nel gestore sia interrotto. Questo può essere determinato dal fatto che un punto di interruzione sulla prima riga del gestore non viene mai raggiunto quando si fa clic sul pulsante.

Altri eventi stanno funzionando (sto usando eventi CheckedChanged su questo modulo e si stanno comportando).

I membri del mio team hanno esaminato e inoltre non sono in grado di individuare il problema.

Qui è una vista semplificata del mio codice:

Codice generato da Progettazione

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: Informazioni aggiuntive da Testing

Ci sono diversi elenchi a discesa nel mio modulo. Ho scoperto che l'evento click non riesce a sparare se prima faccio una selezione in un menu a tendina.

Se non si effettuano selezioni, il punto di interruzione nel gestore del pulsante si attiva. Altrimenti no. Non ci sono eventi registrati in questi elenchi a discesa.

+1

c'è qualche altro codice nel tuo modulo che sta rimuovendo il cablaggio tra evento e gestore dopo che è stato chiamato 'InitializeComponent'? – Kapoor

+1

Riesci a pensare ad un esempio di qualcosa che possa farlo? Ora avrò uno sguardo, ma non so cosa cercare che potrebbe annullare quel cablaggio. –

+1

Il tuo pulsante è abilitato? –

risposta

6

Come lei ha ricordato nel tuo post:

Il problema non è con gli eventi dei pulsanti, ma con la forma diventa bloccato dopo aver effettuato una selezione da una casella a discesa.

Ecco il motivo:

Quando si utilizza l'associazione dati, quando si immette un valore in un controllo associato ai dati, in primo luogo tenta di convalidare l'ingresso e poi se la voce era valido, volontà associazione di dati inserire il valore nell'origine dati, ma se si verifica un errore di convalida, la convalida restituisce false e il controllo passa alla modalità non valida.

Quando un controllo figlio di modulo non è stato convalidato, per impostazione predefinita non è possibile modificare lo stato attivo da un controllo non valido.

Fare clic su un pulsante per impostazione predefinita causa la convalida del controllo che ha perso lo stato attivo, quindi non è possibile fare clic sul pulsante, come si vede il pulsante riflette sul mouse ma in realtà non fa clic.

È possibile simulare semplicemente tale comportamento gestendo l'evento Validating di TextBox e impostare e.cancel = true.

Ecco la correzione:

è possibile risolvere questo comportamento utilizzando queste opzioni:

  • Set CausesValidation proprietà del pulsante a false
  • Set AutoValidate proprietà del modulo per AutoValidate.EnableAllowFocusChange
+0

Grazie, questo mi ha dato una piena comprensione di ciò che stava producendo l'errore. Ero riuscito a sistemarlo, senza capire perché fosse rotto o perché fosse stato risolto. –

+0

Siete i benvenuti :) –

0

questo farà il trucco per voi

Change

public ScheduleMeeting() 
{ 
    InitializeComponent(); 
} 

a

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

Come si compila 'public ScheduleMeeting()' in quella classe? Strano che lo sia. – shahkalpesh

+0

@shahkalpesh: Sono d'accordo con te –

+0

Molto dispiaciuto per quello, è stato qualcosa che ho dimenticato di cambiare mentre copiavo il mio codice e lo semplificavo per la domanda. Nel mio codice attuale, la classe è chiamata "ScheduleMeeting", ma per questo esempio l'ho rinominata "MyForm" –

1

ho scoperto il problema dopo ulteriori test.

I il problema non riguarda gli eventi di pulsante, ma il modulo si blocca dopo aver effettuato una selezione da una casella a discesa.

Non ho ancora scoperto il motivo per cui il modulo si blocca dopo il menu a tendina selezionato (non ha eventi, ma ha un collegamento dati, quindi ci sono alcune possibili cause lì).

Grazie per tutto il vostro aiuto!

+0

Ho posto il motivo in base alla risposta. Spero che tu trovi utile :) –

Problemi correlati