none
WPF Treeview DoubleClick Error RRS feed

  • Frage

  • Hallo Forum,

    ich habe eine TreeView und mache eine Abfrage auf den Header und Tag von dem item.

    Der Code ist folgender.

      private void treeViewBasis_MouseDoubleClick(object sender, MouseButtonEventArgs e)
            {
                int index = 0;
    
                if (treeViewBasis.Items.Count >= 0)
                {
    
                    var tree = sender as TreeView;
    
                    if (tree.SelectedValue != null)
                    {                    
                        TreeViewItem itemx = tree.SelectedItem as TreeViewItem;
                        if (itemx.Tag.ToString() != "0")
                        {
                            MessageBox.Show("X" + itemx.Header.ToString());
                            MessageBox.Show("X" + itemx.Tag.ToString());
                        }
                    }
                }

    Das funktioniert auch einwandfrei , wenn ich ein neues Fenster mache.

    Nun habe ich den Code in ein bestehendes Fenster mit einem neuen Tree kopiert.

    Dann erhalte ich bei der Ausführung folgenden Fehler bei der Zeile

    if (itemx.Tag.ToString() != "0")
    Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

    Der itemx ist null

    wenn ich aber in der Zeile

    if (tree.SelectedValue != null)

    denn tree ansehe, dann ist da aber das selected item mit den Informationen zu sehen und auch der Header und Tag "Text" wird angezeigt. Somit wird der if ja auch richtig ausgeführt. Warum funktioniert die Zeile

     TreeViewItem itemx = tree.SelectedItem as TreeViewItem;

    nicht ? im Test Projekt geht das aber? Was ist mein Fehler ?



    Gruß Roland

    Sonntag, 14. Juni 2015 11:09

Antworten

  • Ich würde da komplett dem Peter zustimen und noch anmerken:

    Da du den wert von

    tree.SelectedItem

    sowieso umwandelst würde ich empfehlen die Umwandlung zuerst druchzuführen und dann zu schauen, ob das Produkt null ist.

    Denn der as-Operator gibt immer dann null zurück, wenn das original-Objekt selber null ist oder es nicht möglich war zu casten.

    Besser wäre also:

    var n = tree.SelectedItem as TreeViewItem;
    if(n != null) {
       // Mit n arbeiten
    }


    © 2015 Thomas Roskop

    Germany // Deutschland

    • Als Antwort markiert Roland DE Samstag, 20. Juni 2015 16:22
    Sonntag, 14. Juni 2015 19:22

Alle Antworten

  • Hi Roland,
    das Problem kann entstehen, wenn zum Zeitpunkt des Doppelklicks kein Knoten angeklickt wurde, z.B., wenn in den Bereich des Treeviews außerhalb der Knoten geklickt wurde oder die Knoten nicht vom Typ TreeViewItem sind.

    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks

    Sonntag, 14. Juni 2015 13:09
  • Ich würde da komplett dem Peter zustimen und noch anmerken:

    Da du den wert von

    tree.SelectedItem

    sowieso umwandelst würde ich empfehlen die Umwandlung zuerst druchzuführen und dann zu schauen, ob das Produkt null ist.

    Denn der as-Operator gibt immer dann null zurück, wenn das original-Objekt selber null ist oder es nicht möglich war zu casten.

    Besser wäre also:

    var n = tree.SelectedItem as TreeViewItem;
    if(n != null) {
       // Mit n arbeiten
    }


    © 2015 Thomas Roskop

    Germany // Deutschland

    • Als Antwort markiert Roland DE Samstag, 20. Juni 2015 16:22
    Sonntag, 14. Juni 2015 19:22
  • Hallo Thomas, hallo Peter,

    Danke für die Info. Hab das Fenster neu erstellt dann hat es funktioniert.


    Gruß Roland

    Samstag, 20. Juni 2015 16:24