Laden...

TreeView DrawNode - Zeichenfehler OwnerDrawText!?

Letzter Beitrag vor 12 Jahren 6 Posts 3.425 Views
TreeView DrawNode - Zeichenfehler OwnerDrawText!?

Gibt's beim TreeView aktuell einen Bug beim OwnerDrawText?
Denn folgender Code verursacht bei mir einen Zeichenfehler. Einfach ein paar Nodes expandieren dann enstehen "oben" im TreeView Darstellungsfehler. Ich habe keine Ahnung was da passiert. Kennt jemand das Problem?

            e.Graphics.FillRectangle(Brushes.White, e.Bounds);
            e.Graphics.DrawString(e.Node.Text, SystemFonts.DefaultFont, Brushes.Blue, e.Bounds);

Zum Testen habe einfach mal ein TV gefüllt:

            for (int i = 0; i < 10; i++)
            {
                TreeNode tn = new TreeNode(i.ToString() + " bla bla bla bla bla blabla bla blabla bla bla");
                treeView1.Nodes.Add(tn);
                for (int z = 0; z < 10; z++)
                {
                    TreeNode tn2 = new TreeNode(z.ToString() + " bla bla bla");
                    tn.Nodes.Add(tn2);

                    for (int tt = 0; tt < 5; tt++)
                    {
                        TreeNode tn3 = new TreeNode(tt.ToString() + " bla bla bla bla bla blabla bla bla");
                        tn2.Nodes.Add(tn3);
                    }

                }
            }

Hallo Mausschubser,

von einem prinzipiellen Bug ist mir nichts bekannt. Darstellungsfehler gehen mitunter auf veraltete/fehlerhafte Grafiktreiber zurück.

Hänge bitte mal einen Screenshot an.

herbivore

Hi herbivore

Bild ist im Anhang!
Einfach mal schnell ein paar Notes öffnen (Doppelklick), dann gibt es die Darstellungsfehler.
Ich habe den Fehler auf 2 Rechnern (GFORCE 8600 und 9600). Neueste NVidea Treiber! Beide Vista Ultimate.

Hallo Mausschubser,

das sieht so aus, als würdest du (auch) im TreeView.OnPaint zeichnen und nicht nur im TreeView.OnDrawItem bzw. (auch) per Graphics.CreateGraphics (treeView1) und nicht nur per e.Graphics.

herbivore

Hi herbivore,

ich mach leider nichts außer dem Code den ich schon gepostet habe.
Wichtig ist auch, dass das TreeView kleiner als die Nodes sind. Sowohl in der Breite als auch in der Höhe. Ich wundere mich ja auch. Ich nutze VS2010 Prof.
Werde das Ganze mal MS posten.

Gruß Mausschubser

Gerade beim Suchen nach was ähnlichem drüber gestolpert...
Ich hatte das bei meinem OwnerDrawText im TreeView auch (kurz nach dem Erweitern eines Knotens, dann wurde es wieder überzeichnet).
Grund für das Zeichnen in der oberen linken Ecke war, dass e.Node.Bounds.Width/Height 0 war (bzw. e.Node.Bounds.X/Y war -1). Wenn man in diesem Fall einfach nichts zeichnet, ist der Effekt nicht mehr zu beobachten.