C# errore nel gestire evento

domenica 04 aprile 2010 - 19.47

fixed Profilo | Junior Member

Ciao a tutti, sono nuovo del forum.mi sono appena iscritto.
ho il seguente problema e spero mi diate una mano perchè non riesco ad uscirne fuori:

ho creato una TreeView e quando clicco sui nodi faccio comparire un messaggio.
il problema è per esempio che se cambio nodo e poi ritorno sul nodo figlio il messaggio mi compare più volte
come se entrasse piu volte nel secondo if, cioè mi compare più volte "sono il figlio"

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
treeView1.NodeMouseClick += new TreeNodeMouseClickEventHandler(NodeMouseClick);
}


public void NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{

if (e.Node.Name == "Nodo0")
{
MessageBox.Show("sono il padre");
}
if (e.Node.Name == "Nodo1")
{
MessageBox.Show("sono il figlio");
}
}

kataklisma Profilo | Senior Member

>Ciao a tutti, sono nuovo del forum.mi sono appena iscritto.
>ho il seguente problema e spero mi diate una mano perchè non
>riesco ad uscirne fuori:
Ciao e benvenuto nella community!

>ho creato una TreeView e quando clicco sui nodi faccio comparire
>un messaggio.
>il problema è per esempio che se cambio nodo e poi ritorno sul
>nodo figlio il messaggio mi compare più volte
>come se entrasse piu volte nel secondo if, cioè mi compare più
>volte "sono il figlio"
>
>private void treeView1_AfterSelect(object sender, TreeViewEventArgs
>e)
>{
>treeView1.NodeMouseClick += new TreeNodeMouseClickEventHandler(NodeMouseClick);
>}
>
>
>public void NodeMouseClick(object sender, TreeNodeMouseClickEventArgs
>e)
>{
>
>if (e.Node.Name == "Nodo0")
>{
>MessageBox.Show("sono il padre");
>}
>if (e.Node.Name == "Nodo1")
>{
>MessageBox.Show("sono il figlio");
>}
>}

Beh, non capisco perchè non utilizzi gli eventi messi a disposizione del componente, non c'è bisogno di aggiungere un'evento ogni qual volta l'evento afterSelect viene richiamato!Questa è la motivazione per la quale ad ogni click sul nodo corrispondono n + 1 apparizioni della messagebox.

Ti faccio un'esempio :

public void NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (e.Node.Name == "Nodo0") { MessageBox.Show("sono il padre"); } if (e.Node.Name == "Nodo1") { MessageBox.Show("sono il figlio"); } }

Con questa routine ad ogni click sul nodo corrisponde una ed una sola messagebox.

Ovviamente devi aggiungere nel Form.Designer.cs all'evento NodeMouseClick la routine sopra descritta :

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

;)

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

fixed Profilo | Junior Member

ciao, grazie mille per l'aiuto ora funziona tutto correttamente.
il problema era proprio quello da te segnalato

ciao

kataklisma Profilo | Senior Member

>ciao,
Buonasera!

>grazie mille per l'aiuto ora funziona tutto correttamente.
>il problema era proprio quello da te segnalato
Perfetto, la community serve a questo!Sarò lieto di aiutarti anche in futuro se ne avrai bisogno!


Ciao!!

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/
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