MouseMove unter Vista

25/03/2008 - 08:55 von Florian Simon | Report spam
Hallo zusammen,

ich stelle in einer Anwendung verschiedene Objekte als Grafiken auf
einem Panel dar. Diese Grafiken sollen über einen Tooltip beschrieben
werden. Den ToolTip setze ich im MouseMove-Event das Panels.

Vereinfachtes Beispiel:

private void panel_MouseMove(object sender, MouseEventArgs e)
{
Point p = this.panel.PointToClient(Cursor.Position);
string s = string.Empty;
if(this.rectList[0].Contains(p))
{
s = "Test 1";
}
else if(this.rectList[1].Contains(p))
{
s = "Test 2";
}
else if(this.rectList[2].Contains(p))
{
s = "Test 3";
}
this.toolTip1.SetToolTip(this.panel, s);
//this.Text = string.Format("HoverCount: {0}", ++this.count);
}

Unter XP funtioniert das auch wunderbar... Nur kommt es unter Vista zu
dem Problem, dass stàndig ein MouseMove Event gefeuert wird (kann man
erkennen, wenn man die letzte Zeile der Methode wieder in den Code
nimmt; zàhlt wie verrückt nach oben), auch wenn die Maus nicht bewegt
wird. Dadurch flackert die Darstellung des ToolTips, da dierser ja immer
wieder neu aufgebaut werden muss. Hat vielleicht jemand einen Vorschlag,
wie man das sonst noch lösen könnte? MouseHover ist leider keine Lösung,
da dann der ToolTip nur dann auf ein anderes Objekt gesetzt wird, wenn
der Cursor den Bereich des Panles, auf dem die Darsetllungen sind
verlassen hat :-(

Gruß
Florian
 

Lesen sie die antworten

#1 Frank Dzaebel
25/03/2008 - 13:49 | Warnen spam
Hallo Florian,

Den ToolTip setze ich im MouseMove-Event das Panels.
private void panel_MouseMove(object sender, MouseEventArgs e)



Gerade nur als Idee, wenn durch Deinen
(von mir ungeprüften) Code wieder ein MouseMove
ausgelöst werden würde:

panel.MouseMove -= new MouseEventHandler(panel_MouseMove);
// [...Dein Code] SetToolTip [...]
panel.MouseMove += new MouseEventHandler(panel_MouseMove);


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen