Zum Inhalt springen

TreeView: Wie geht dynamischer Methodenaufruf?


geloescht_Henriette

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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
Link zu diesem Kommentar
Auf anderen Seiten teilen



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());

}



Link zu diesem Kommentar
Auf anderen Seiten teilen

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
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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... :(

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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
Link zu diesem Kommentar
Auf anderen Seiten teilen

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...