2009-04-02 4 views
3

Ich versuche es so zu machen, dass ich bestimmte Ereignisse ausführen kann, wenn ein Knoten in einer TreeView ausgewählt ist. Ich führe den Code und ich bekomme einen Fehler, der liest NullReferenceException wurde unbehandelt: Objektreferenz nicht auf eine Instanz eines Objekts festgelegt.C#: Hilfe zur Ermittlung des ausgewählten Knotenindex in einem TreeView. NullReferenceException Fehler?

Gibt es Hinweise, wie man dieses Hindernis überwinden kann?

private void tvNodes_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) 
    { 
     switch (tvNodes.SelectedNode.Index) 
     { 
      case 0: 
       //first item 
       break; 

      case 1: 
       //second item 
       break; 

      case 2: 
       //third item 
       break; 
     } 
    } 

Antwort

4

tvNodes.SelectedNode ist nicht der gleiche wie der Knoten, den Sie auf geklickt haben, und kann null sein. Ändern Sie stattdessen, um e.Node.Index zu verwenden. Und ich bin paranoid; Ich würde wahrscheinlich noch prüfen, ob e.Node ist nicht null erste ...

if(e.Node == null) return; 
    switch (e.Node.Index) 
    { 
     case 0: 
      //first item 
      break; 

     case 1: 
      //second item 
      break; 

     case 2: 
      //third item 
      break; 
    } 
+0

Paranoia hilft immer! :) – SirDemon

0
private void tvNodes_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { 
    var index = null != e.Node ? e.Node.Index : -1; 
    switch (index) { 
     case 0: 
      //first item 
      break; 
     case 1: 
      //second item 
      break; 
     case 2: 
      //third item 
      break; 
    } 
} 
0

Ich versuche, es zu machen, so kann ich bestimmte Ereignisse ausgeführt werden, wenn ein Knoten ausgewählt ist in einem TreeView.

Sieht aus wie Sie Afterselect Ereignis statt NodeMouseClick verwenden müssen:

private void tvNodes_AfterSelect(object sender, TreeViewEventArgs e) 
{ 
    switch (e.Node.Index) 
    { 
     case 0: 
      //first item 
      break; 

     case 1: 
      //second item 
      break; 

     case 2: 
      //third item 
      break; 
    } 

} 

Sie sollten beachten, dass nur einmal Afterselect erfolgt nach Knoten Auswahl, ob über die Tastatur geändert oder mit der Maus. NodeMouseClick trat jedes Mal auf, wenn Node mit Mäusen klickte. In MSDN:

tritt dieses Ereignis, wenn der Benutzer klickt jeden Teil eines Baumknoten mit der Maus, einschließlich den Pluszeichen (+) oder Minuszeichen (-), dass der Knoten, ob anzeigt ist zusammengebrochen oder erweitert.

Daher kann SelectedNode null sein, weil der Benutzer auf [+] oder [-] klickt.

Verwandte Themen