Positionierung Tooltip in einem TreeView
-
Hallo,
habe folgendes Problem und hoffe dass mir da jemand weiterhelfen könnte:
Mein Ziel: In einem TreeView soll beim Drücken der rechten Maustaste ein Tooltip erscheinen, und zwar auf genau der Position, auf der der Mauszeiger liegt (bzw. alternativ auf dem Knoten, der gerade markiert ist). Beim Loslassen der Taste soll das Tooltip wieder verschwinden.Habe es mit folgendem Code probiert:
..... this.treeView1.MouseDown += new MouseEventHandler(hold); this.treeView1.MouseUp += new MouseEventHandler(up); this.toolTip1.IsBalloon = true; this.toolTip1.AutomaticDelay = 0; } public void hold(object sender, MouseEventArgs e) { if(e.Button == MouseButtons.Right){ this.treeView1.Nodes[0].Text = "down"; this.toolTip1.Show("hallo", this.treeView1, e.X, e.Y); } } public void up(object sender, MouseEventArgs e) { this.treeView1.Nodes[0].Text = "up"; }
(ist jetzr vereinfacht, aber ich hoffe man merkt worauf ich hinauswill).
Das Ganze funktioniert auch so wie ich will, ABER erst ab dem 2. Rechtsklick.
Beim ersten Rechtsklick wird zwar auch das Tooltip angezeigt, aber auf einer ganz anderen Position. Beim 2. Rechtsklick wird es genau auf der Mauszeigerposition angezeigt, so wie ich es auch will.Weiss jmd woran das liegen könnte?
-
Probiert mal satt e.X/e.Y => Mouse.GetPosition.X /Mouse.GetPosition.Y
-
Geht auch nicht, mhhhhh.
Noch jemand einen Idenn? :xmas2:
-
Hmm komisch,
probiers mal so:
1. leg zwei membervariablen an X und Y in deiner Klasse!
2. Fang das MouseMove Event ab und merk dir da jedes mal die aktuelle Position
this.treeView1.MouseMove += new MouseEventHandler(currentMousePos); .... double X,Y; public void currentMousePos(object sender, MouseEventArgs e) { X=e.X; Y= e.Y; }
in deiner hold Methode, verwendest du dann das X und Y Feld:
public void hold(object sender, MouseEventArgs e) { if(e.Button == MouseButtons.Right){ this.treeView1.Nodes[0].Text = "down"; // X und Y feld verwenden this.toolTip1.Show("hallo", this.treeView1, X, Y); } }
Das ist zwar nich so elegant, ehr ein gehackem aber eine "Work-arround" für dein Problem.
grüße
-
Hallo nochmal,
erstmal: wer hat denn da noch als blubbla geantwortet? Ich (threadersteller) wars jedenfalls nicht
Also das Problem ist auch:
Selbst wenn ich ich statt e.X oder MousePosition.X feste Werte verwende, wird der Tooltip erst beim 2. Mal richtig angezeigt.
Also this.tooltip.Show("hallo", this.treeview, 10, 10) wird beim ersten AUfruf woanders angezeigt, ab dem 2. dann bei 10,10.Wobei, könnte das was damit zu tun haben dass das treeview nocht nicht den Fokus hat, da der erst bei einem MausClick eintritt, Mousedown aber vor dem MouseClick aufgerufen wird und somit der treeview erst danach "aktiviert" wird? Werde da nochmal ein bisschen rumtesten.
-
ich bin mir nicht sicher, aber ist es möglich die Position des Tooltips vorher fest zu legen? Möglicherweise ein Fehler im control, dass erst angezeigt wird und dann Position verändert wird.
-
Unter .net 3.5 gibt es ein Tooltip.Placement, ich arbeite hier leider mit .net 2.0 und da ist mir nichts in der Richtung bekannt.
-
wie wärs dann wenn du einfach sofort 2 mal öffnest also show hide show