2012-03-13 11 views
9

Sto provando ad attivare automaticamente gli eventi in base alla pagina della scheda su cui si fa clic sul controllo struttura a schede.TabPage Click Events

Nella modalità di progettazione del mio modulo, quando faccio clic sulle schede, la finestra delle proprietà dice Tabs System.Windows.Forms.TabControl a seconda della scheda selezionata. Tuttavia, devo fare clic sulla pagina effettiva, non sulla scheda per la proprietà da modificare al nome delle pagine, ad es. TaskListPage System.Windows.Forms.TabPage.

Il mio tabcontrol si chiama Tab e stavo cercando di testarlo utilizzando il codice seguente che dovrebbe visualizzare un messaggio basato sull'opzione tab.

private void Tabs_SelectedIndexChanged(object sender, EventArgs e) 

     { 
      if (Tabs.SelectedTab == TaskListPage) 
      { 
       MessageBox.Show("TASK LIST PAGE"); 
      } 
      else if (Tabs.SelectedTab == SchedulePage) 
      { 
       MessageBox.Show("SCHEDULE PAGE"); 
      } 
     } 

Quando provo il codice sopra, non succede nulla.

Qualsiasi aiuto per far funzionare gli eventi quando si fa clic su una scheda specifica sarebbe molto apprezzato!

Grazie

risposta

13

Sembra che tu non ce l'hai cablato:

public Form1() { 
    InitializeComponent();  
    Tabs.SelectedIndexChanged += new EventHandler(Tabs_SelectedIndexChanged); 
} 

Ci sono altri eventi che si possono dare queste informazioni così: Selected e Selecting.

void Tabs_Selected(object sender, TabControlEventArgs e) { 
    if (e.TabPage == TaskListPage) { 
    // etc 
    } 
} 
+0

Grazie sta funzionando ora! :) – Rob

+0

Lo aggiungerò qui per chi è alla ricerca di una soluzione per lo stesso problema che avevo. Gli eventi non vengono attivati ​​fino a quando non viene eseguito il costruttore. Anche aggiungere manualmente il gestore come suggerisce Lars non funziona. Aggiungere il codice che attiva l'evento in un gestore di eventi Load per il modulo. – ensignr

0

Questa prima parte va nella

public Form1() 
    { 
// This is near the top of the form 1 code in form1.cs 

     InitializeComponent(); 
     tabControl1.SelectedIndexChanged += new EventHandler(TabControl1_SelectedIndexChanged); 
    } 

Poi in basso nel codice normale è sufficiente dire che il controllo deve avere la messa a fuoco dopo che la scheda viene cliccato. Che nel mio word processor, ho usato una casella di testo rich e controlli di tabulazione per simulare il nastro msword. I ricchi controllo di testo nel mio caso non è su una scheda come i miei fogli di registro coprono forse 1 o 2 pollici sulla parte superiore del modulo

private void TabControl1_SelectedIndexChanged(object sender, EventArgs e) 
    { 

     richTextBox1.Focus(); 
    } 

Questo è quello che io chiamo il mio word processor. È qui per tutti coloro che vorrebbero usarlo. Larry's Journal