myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE7
   » Gadget für Vista
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin
» Accessoires

Ressourcen
» .NET-Glossar
» guide to C#
» openbook: Visual C#
» openbook: OO
» .NET BlogBook
» MSDN Webcasts
» dotnetjob.de
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Bankverbindung
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: Windows-Forms » TreeView aktualisieren nach ImageKey Änderung
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

TreeView aktualisieren nach ImageKey Änderung

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
SeCuRiiTaS
myCSharp.de-Mitglied

Dabei seit: 12.03.2012
Beiträge: 108


SeCuRiiTaS ist offline

TreeView aktualisieren nach ImageKey Änderung

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo zusammen,
ich habe eine TreeView. Diese befülle ich mit Nodes aus einer Liste.

Nun setze ich zu diesen Nodes die ImageKeys, sodass Icons angezeigt werden.
Klappt soweit wunderbar.

Nun möchte ich bei einem Event das Icon des jeweiligen Nodes ändern.
Das klappt soweit auch wunderbar, im Debug-Modus sehe ich auch, wie der Wert geändert wird. Allerdings wird sichtlich im TreeView das Icon nicht gewechselt und bleibt das gleiche.

Woran liegt das?

Meine Methoden:

C#-Code:
public void SetStatusAtTreeViewOrganigramm(string speedDialName, string statusParameter)
        {
            TreeNodeCollection nodes = treeOrganigramm.Nodes;
            foreach (TreeNode n in nodes)
            {
                FindRecursive(n, speedDialName, statusParameter);
            }
        }

C#-Code:
private void FindRecursive(TreeNode treeNode, string search, string status)
        {
            foreach (TreeNode tn in treeNode.Nodes)
            {
                // if the text properties match, color the item
                if (tn.Text == search)
                {
                    setImage(tn, status);
                    break;
                }

                FindRecursive(tn, search, status);
            }
        }

Habe schon gegooglet und gefunden, dass man evtl. das TreeView invalidieren muss und neu validieren muss.

C#-Code:
treeOrganigramm.Invalidate(tn.Bounds);
treeOrganigramm.Update();

Klappt leider trozdem nicht.

Bin über jede Hilfe sehr dankbar, vielen Dank.
08.05.2012 16:39 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Jonny132
myCSharp.de-Mitglied

Dabei seit: 24.07.2008
Beiträge: 21


Jonny132 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

ich denke die SetImage-Funktion wäre eher interessant.

Vielleicht hilft dir dieses Schnipsel weiter:

C#-Code:
    private void Form1_Load(object sender, EventArgs e)
    {
      for (int i = 0; i < 5; i++)
      {
        TreeNode parent = new TreeNode("Parent " + i.ToString());
        for (int j = 0; j < 10; j++)
        {
          parent.Nodes.Add(new TreeNode("Child " + j.ToString()));
        }

        treeView1.Nodes.Add(parent);
      }

      ImageList list = new ImageList();
      list.Images.Add(Properties.Resources.UnChecked);
      list.Images.Add(Properties.Resources.Checked);

      treeView1.ImageList = list;
      treeView1.NodeMouseClick += new TreeNodeMouseClickEventHandler(treeView1_NodeMouseClick);
    }

    void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
    {
      e.Node.SelectedImageIndex= 1;
    }

btw: Du sprichst immer von Events meinst aber wohl eher Funktionen ;)

sg

PS: Ich weiss, dass das Beispiel wenig Sinn macht, soll nur zeigen, dass ein wechsel des ImageIndex des Nodes ausreicht um das 'Bild' auszutauschen.

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Jonny132 am 08.05.2012 17:04.

08.05.2012 17:01 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
SeCuRiiTaS
myCSharp.de-Mitglied

Dabei seit: 12.03.2012
Beiträge: 108

Themenstarter Thema begonnen von SeCuRiiTaS

SeCuRiiTaS ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,
vielen Dank für deine Antwort.

Also ob ich jetzt den Index des Bildes oder den Namen des Bildes anspreche jeweils über ImageKey bzw. ImageIndex ist völlig egal. Das Bild wird angezeigt, aktualisiert sich via Event im Code aber leider nicht visuell.

Zitat:
Du sprichst immer von Events meinst aber wohl eher Funktionen ;)

Doch ich meine Events, sonst hätte ich Funktionen/Methoden geschrieben.

Hab ein Event, welches reagiert, sobald jemand bei uns in der Firma den Telefonhöher abnimmt, sich ab- und anmeldet... dementsprechend müssen Icons für den Status gesetzt werden. Status setzen machen Methoden, aber mein Event ist der erste Schritt.

Kein anderer eine Idee woran das liegen könnte?
09.05.2012 07:06 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Jonny132
myCSharp.de-Mitglied

Dabei seit: 24.07.2008
Beiträge: 21


Jonny132 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,

mein Beispiel soll zeigen, dass ein einfaches wechseln des ImageKeys des Nodes ausreicht um das Bild zu aktualisieren.
Wenn das bei dir nicht Funktioniert, hast du irgendeinen Fehler bzw. vll blockiert irgendwo etwas. Mit dem von dir geposteten Code kann man nichts anfangen weil der nur zeigt wie du rekursiv durch alle Nodes gehst, was aber mit der Anzeige eines Bildes im Treeview (worum dieser Thread geht) nichts zu tun hat. Deshalb hab ich geschrieben die setImage-Funktion wäre wohl eher interessant. Diese Aussage hast du wohl ignoriert ;).

Also ich kann nur raten. Villeicht weiss ein anderer mehr.

sg
09.05.2012 08:17 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
SeCuRiiTaS
myCSharp.de-Mitglied

Dabei seit: 12.03.2012
Beiträge: 108

Themenstarter Thema begonnen von SeCuRiiTaS

SeCuRiiTaS ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Oh, entschuldige bitte.
Das hab ich wohl überlesen.

Hier meine setImage Methode:

C#-Code:
private void setImage(TreeNode tn, string status)
        {
            if (treeOrganigramm.ImageList == null)
            {
                treeOrganigramm.ImageList = new ImageList();
                treeOrganigramm.ImageList.Images.Add("Abgemeldet",
                Properties.Resources.off);
                treeOrganigramm.ImageList.Images.Add("Angemeldet",
                Properties.Resources.frei);
                treeOrganigramm.ImageList.Images.Add("Besetzt",
                Properties.Resources.besetzt);
            }

            if (status == "LoggedOn" || status == "Angemeldet")
            {
                tn.ImageKey = "Angemeldet";
            }
            else if (status == "LoggedOff" || status == "Abgemeldet")
            {
                tn.ImageKey = "Abgemeldet";
            }
            else if (status == "Active" || status == "Besetzt")
            {
                tn.ImageKey = "Besetzt";
            }
            else
        }

//edit:habs nun mal angepasst mit ImageIndex

C#-Code:
private void setImage(TreeNode tn, string status)
        {
            if (treeOrganigramm.ImageList == null)
            {
                treeOrganigramm.ImageList = new ImageList();
                treeOrganigramm.ImageList.Images.Add("Abgemeldet",
                Properties.Resources.off);
                treeOrganigramm.ImageList.Images.Add("Angemeldet",
                Properties.Resources.frei);
                treeOrganigramm.ImageList.Images.Add("Besetzt",
                Properties.Resources.besetzt);
            }

            if (status == "LoggedOn" || status == "Angemeldet")
            {
                tn.ImageIndex = 1;
                tn.SelectedImageKey = "1";

                //tn.ImageKey = "Angemeldet";
                //tn.SelectedImageKey = "Angemeldet";
            }
            else if (status == "LoggedOff" || status == "Abgemeldet")
            {
                tn.ImageIndex = 0;
                tn.SelectedImageKey = "0";

                //tn.ImageKey = "Abgemeldet";
                //tn.SelectedImageKey = "Abgemeldet";
            }
            else if (status == "Active" || status == "Besetzt")
            {
                tn.ImageIndex = 2;
                tn.SelectedImageKey = "2";

                //tn.ImageKey = "Besetzt";
                //tn.SelectedImageKey = "Besetzt";
            }
        }

Klappt trotzdem nicht.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von SeCuRiiTaS am 09.05.2012 08:52.

09.05.2012 08:45 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
herbivore
myCSharp.de-Team (Admin)

images/avatars/avatar-2627.gif


Dabei seit: 11.01.2005
Beiträge: 47.495
Entwicklungsumgebung: csc/nmake (nothing is faster)
Herkunft: Berlin


herbivore ist online

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo SeCuRiiTaS,

mach mal ein minimales Testbeispiel: Nur ein TreeView, eine ImageList mit zwei Icons, nur ein TreeNode mit einem Icon und einen Button, der das andere Icon setzt. Wenn das korrekt funktioniert hast, du eine Basis für  [Tutorial] Vertrackte Fehler durch Vergleich von echtem Projekt mit minimalem Testprojekt finden. Wenn nicht, dann kannst du das minimale Projekt hier posten, damit wir es selbst ausprobieren können.

herbivore
09.05.2012 08:51 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
SeCuRiiTaS
myCSharp.de-Mitglied

Dabei seit: 12.03.2012
Beiträge: 108

Themenstarter Thema begonnen von SeCuRiiTaS

SeCuRiiTaS ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Oh man ich hab den Fehler gefunden. Das ist ein threadübergreifender Befehl der natürlich nicht funktioniert hatte. Klappt nun alles einwandfrei vielen Dank.
09.05.2012 09:25 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Jahr.
Der letzte Beitrag ist älter als ein Jahr.
Antwort erstellen


© Copyright 2003-2013 myCSharp.de-Team. Alle Rechte vorbehalten. 24.05.2013 13:15