Announcement

Collapse
No announcement yet.

Tipp: Maus positionieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Tipp: Maus positionieren

    Hallo,

    seit den Anfängen von Windows stört es mich, dass die Maus sich "irgendwo" befindet, aber nicht in der Nähe des aktivierten Controls (z.B. beim OK-Button der MessageBox).

    Für eigene Programme setze ich die <b>Maus</b> immer dorthin, wo der Benutzer arbeiten soll, vorzugsweise dann, wenn <b>ActiveControl</b> geändert wird. Dazu biete ich die folgende Routine an:

    <u>Variante 1: in jedem Formular vorsehen</u>
    protected void ControlActivate(Control ctl, bool bActive) {
    Point pCtl = new Point(ctl.Left, ctl.Top);
    Control con = ctl.Parent;
    while ( !(con is Form) ) {
    pCtl.X += con.Left; pCtl.Y += con.Top; con = con.Parent; }
    Point loc = this.PointToScreen(pCtl);
    // Mausposition wird bei Buttons zentriert gesetzt, sonst links oben
    if (ctl is Button) { loc.X += ctl.Width/2; loc.Y += ctl.Height/2; }
    else { loc.X += 16; loc.Y += 8; }
    Cursor.Position = loc;
    // bei Bedarf das Control zum aktiven machen
    if (bActive) {
    // das kann z.B. bei unsichtbaren Controls auch schief gehen
    try { this.ActiveControl = ctl; }
    catch { ; }
    } }

    <u>Variante 2: in einer DLL im Namespace System.Windows.Forms</u>
    Erzeuge in einer Assembly für diesen Namespace eine beliebige Klasse (z.B. ControlsEx) und definiere dort diese Methode:
    static public void ...
    Dann ist <i>this</i> zu ersetzen durch <i>ctl.FindForm()</i>.
    Bei dieser Variante steht diese Methode "immer" zur Verfügung.

    Viel Erfolg bei der Nutzung! Jürgen
Working...
X