PDA

View Full Version : [C#] Ottenere il nome del controllo contenuto nel Tab corrente di TabControl


alex783
03-04-2009, 14:37
Scusate, ma non ci sto davvero riuscendo. Vi spiego la situazione:
ho un form contenente un TabControl con diverse schede. Ogni scheda contiene un suo controllo CheckedListBox. Devo fare in modo che, al cambio di scheda (sfruttando quindi l'evento SelectedIndexChanged), il codice mi indichi il nome del CheckedListBox correntemente visualizzato.

Spero di essere stato chiaro.
Grazie. :)

matteo micanti
03-04-2009, 17:01
Potresti farlo con LINQ :)


string Nome;


E all'interno della procedura di gestione dell'evento SelectedIndexChanged:



Nome = (from el in tabControl1.SelectedTab.Controls.OfType<CheckedListBox>() select el.Name).ElementAt(0);



Ciao!

MarcoGG
03-04-2009, 17:25
Scusate, ma non ci sto davvero riuscendo. Vi spiego la situazione:
ho un form contenente un TabControl con diverse schede. Ogni scheda contiene un suo controllo CheckedListBox. Devo fare in modo che, al cambio di scheda (sfruttando quindi l'evento SelectedIndexChanged), il codice mi indichi il nome del CheckedListBox correntemente visualizzato.

Spero di essere stato chiaro.
Grazie. :)

Sei stato chiarissimo. :)

private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
foreach (Control C in tabControl1.TabPages[tabControl1.SelectedIndex].Controls )
{
if (C is CheckedListBox)
{
MessageBox.Show(C.Name);
}
}
}

;)

alex783
03-04-2009, 20:17
Potresti farlo con LINQ :)


string Nome;


E all'interno della procedura di gestione dell'evento SelectedIndexChanged:



Nome = (from el in tabControl1.SelectedTab.Controls.OfType<CheckedListBox>() select el.Name).ElementAt(0);



Ciao!

Matteo Micanti.

Sei stato chiarissimo. :)

private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
foreach (Control C in tabControl1.TabPages[tabControl1.SelectedIndex].Controls )
{
if (C is CheckedListBox)
{
MessageBox.Show(C.Name);
}
}
}

;)

Grazie infinite ad entrambi. ;)
Alla fine ho implementato la soluzione di MarcoGG perché in .NET 2.0 non esiste il namespace LINQ.