Risalire ad una proprietà dal sender

lunedì 31 dicembre 2007 - 12.10

Giovanni_3478 Profilo | Senior Member

Ciao

Programmo in C#

Ho
private void toolStripMenuItem2_Click(object sender, EventArgs e)
{

}

Vorrei risalire tramite il sender
al Context menu Strip e poi al textbox a cui il ContextMenuStrip è associato.

Nella finestra Watch c'è "base" ;
se scrivo sender.base.nomeProprietà, mi dà errore.

Qual'è la sintassi giusta?

freeteo Profilo | Guru

ciao,
la sintassi giusta è castare il sender al tipo che sai, ad esempio:
GroupBox groupBox = sender as GroupBox; if(sender != null) { ....

questo codice ti permette poi di avere nella variabile locale "groupBox" l'intellisense che ti aspetti, nel tuo caso poi devi andare ulteriormente dentro prendendoti dall'insieme "Controls" il controllo che ti interessa...

Cmq sia, la profondita' la sceglierai tu, ma il concetto è quello che ti ho mostrato.


ps: io preferisco questa sintassi basata su "as" ma puoi fare anche il cast diretto:
GroupBox groupBox = (GroupBox)sender;

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

phomea Profilo | Newbie

Ciao

rispondo a giovanni con un altro metodo....che sarà nel frattempo una domanda "così è giusto?" eh eh

io avuto un problema simile (in vb.net però) e ho risolto così (tradotto in c#) senza utilizzare il sender

private void yoToolStripMenuItem_Click(object sender, EventArgs e)
{
//recupero l'ultimo controllo che ha chiamato il contextmenustrip
Control c = contextMenuStrip1.SourceControl;

//se il controllo è un textbox
if (c.GetType() == typeof(TextBox))
{
c=c as textbox
MessageBox.Show(c.Text);
}
}


ciao ciao

freeteo Profilo | Guru

ciao phomea,
la tua risposta è corretta, inquanto prima di castare verifichi che il tipo sia quello verso cui stai convertendo.Quindi approvo, lo avevo omesso perche' solitamente sai gia' a chi corrisponde inquanto sottoscrivi ad un determinato evento elementi delle stesso tipo, ma questo puo' non essere vero sempre, quindi il tuo è un controllo piu' corretto da fare.


ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

Giovanni_3478 Profilo | Senior Member

Eccomi; ho avuto dei problemi con internet

Ho provato con il codice di Phomea: ok.

Grazie ad entrambi per l'aiuto.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5