Zum Inhalt springen

TreeView: Wie geht dynamischer Methodenaufruf?


Empfohlene Beiträge

Geschrieben

Hi

Ich habe mal wieder eine Frage zu C#.

Ich möchte mit Hilfe eines TreeView und druch Klicken der einzelnen Knoten diverse Methoden aufrufen. Ohne den "echten" Namen des Knotens anzugeben.

Ich möchte folgenden Code so umschreiben, dass ich die Texte nicht statisch angebe:


    private void treeView1_Click(object sender, TreeViewEventArgs e)

    {

      if(treeView1.SelectedNode.Text == "Neu") {

        MessageBox.Show("Neu angeklickt");

        neu();

      }

      else if(treeView1.SelectedNode.Text == "Öffnen") {

        MessageBox.Show("Öffnen angeklickt");

        oeffnen();

      }

      else {

        MessageBox.Show("Beenden geklickt");

        beenden();

      }

    }

Sondern eher so etwa wie es auch in Java gibt:

  public void actionPerformed(ActionEvent e) {

    if(e.getSource()==mitem1) {

      neu();

    }

    else if(e.getSource()==mitem2) {

      oeffnen();

    }

    else if(e.getSource()==mitem4) {

      beenden();

    }

  }

"mitem1" in C# wäre dann mein Knoten im TreeView "knotenNeu" (und nicht der Text des Knotens "Neu").

Hoffe ich habe mich verständlich ausgedrückt...

Viele Grüße

Henriette

Geschrieben (bearbeitet)

Vielleicht wird das ganze so verständlicher. :)

Ich möchte nach der Variablen fragen die ausgewählt wurde. Nicht nach dem Inhalt der Variablen.

(Wegen einer gewünschten sprachunabhängigkeit.) Im deutschen müßte ich auf "Neu" abfragen im englischen auf "New". Da ist die Variable "knotenNeu" schon besser.

Liebe Grüße

Henriette

Bearbeitet von geloescht_Henriette
Geschrieben


public void tree_NodeMouseDoubleClick(object e, TreeNodeMouseClickEventargs f)

// Obersten Knoten angeklickt

if(f.Node.Parent == null)

{

    MessageBox.Show(f.Node.Name.ToString());

}


// Unterknoten angeklickt

if(f.Node.Parent != null)

{

      MessageBox.Show(f.Node.Parent.Name.ToString() + " " + f.Node.Name.ToString());

}



Geschrieben (bearbeitet)

Mit

f.Node.Name.ToString()
bekomme ich zwar den Knoten, welchen ich angeklickt habe. Aber ich möchte nun wissen ob es der von mir gesuchte ist. Und hier habe ich das Problem. Ich möchte folgendes abfragen:

    public void tree_NodeMouseDoubleClick(object e, TreeNodeMouseClickEventargs f)

    {

      if (f.Node.Name == gesuchterKnoten_1)

      {

        //Aufruf Programm 1

      }

      else if (f.Node.Name == gesuchterKnoten_2)

      {

        //Aufruf Programm 2

      }

    }

Wenn ich auf "gesuchterKnoten_1" abfragen möchte, bekomme ich folgende Meldung:

Der Name "gesuchterKnoten_1" ist im aktuellen Kontext nicht vorhanden.

Was muss ich nun nach dem "==" in der if-Anweisung schreiben, wenn ich NICHT nach dem Wert des Knotens fragen will sondern nach dem Variablennamen des Knotens.

Hoffe Ihr könnt mir helfen...

Bearbeitet von geloescht_Henriette
Geschrieben

Ich möchte nach der Variablen fragen die ausgewählt wurde. Nicht nach dem Inhalt der Variablen.

Dazu müsstest ja extra nochmal irgendwo anders einen Vergleichsknoten haben oder genau wiesen wo der Knoten in deinem Tree liegt.

Du musst dir halt irgendwas überlegen womit du deine Knoten eindeutig identifizieren kannst und das schönste dazu ist das schon angesprochene Value Property des Knoten. Hier kannst du einen beliebigen Wert ablegen und später danach abfragen

Geschrieben
Dazu müsstest ja extra nochmal irgendwo anders einen Vergleichsknoten haben oder genau wiesen wo der Knoten in deinem Tree liegt.

Du musst dir halt irgendwas überlegen womit du deine Knoten eindeutig identifizieren kannst und das schönste dazu ist das schon angesprochene Value Property des Knoten. Hier kannst du einen beliebigen Wert ablegen und später danach abfragen

Ich programmiere normalerweise in Java. Da definiere ich einfach ein Objekt auf das ich dann immer zugreifen kann. Sobald ich dieses dann auswähle wird ein Event ausgelöst und ich kann das Objekt abfragen. Sehr einfach das ganze. :)


  JMenuItem mitem1 = new JMenuItem(XML.btNeu);

  JMenuItem mitem2 = new JMenuItem(XML.btOeffnen);

  JMenuItem mitem3 = new JMenuItem(XML.btBeenden);

  ...


  public void actionPerformed(ActionEvent e) {

    if(e.getSource()==mitem1) {

      neu();

    }

    else if(e.getSource()==mitem2) {

      oeffnen();

    }

    else if(e.getSource()==mitem3) {

      beenden();

    }

  }

Dachte bei C# ist das genauso leicht... :(

Geschrieben

Ich löse das ganze nun wie folgt. (Auch wenn mir der Code nicht sonderlich gefällt.)


private void treeView1_Click(object sender, TreeViewEventArgs e)

{

  if (e.Node.Name.ToString().Equals("knoDatPruef"))

  {

    //Aufruf Programm fuer knoDatPruef

  }

  else if (e.Node.Name.ToString().Equals("knoDatPruef_NEU"))

  {

    //Aufruf Programm fuer knoDatPruef_NEU

  }

  else if (...

}

Vielen Dank an alle.

Geschrieben (bearbeitet)
Dachte bei C# ist das genauso leicht... :(

Das hat nichts mit C# oder Java zu tun. Wenn du dir ein TreeNode Object irgendwo anlegst kannst du natürlich darauf vergleichen. Aber schön ist das nicht weil du das Objekt nicht wirklich brauchst.

PS: Theoretisch könntest du auch ein delegate auf den Aufruf der jeweiligen Methode in das Tag Property des TreeNiodes legen und dann einfach aufrufen. Aber so schön fänd ich das jetzt auch nicht...

Bearbeitet von Guybrush Threepwood

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...