Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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



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

}



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

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

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

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.

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.