AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: VCL / WinForms / Controls C# Maus auf aktuellem Control positionieren
Thema durchsuchen
Ansicht
Themen-Optionen

Maus auf aktuellem Control positionieren

Ein Thema von Jürgen Thomas · begonnen am 13. Jul 2006
Antwort Antwort
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#1

Maus auf aktuellem Control positionieren

  Alt 13. Jul 2006, 12:47
Ziel: Die Maus - genauer: der Cursor - soll dort angezeigt werden, wo gearbeitet wird.

Problem: 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).

Lösung: Für eigene Programme setze ich die Maus immer dorthin, wo der Benutzer arbeiten soll, vorzugsweise dann, wenn ActiveControl geändert wird. Dazu biete ich die folgende Routine an, die von Kharabakh überarbeitet und verändert wurde.
Variante 1: in einer DLL für mehrfache Verwendung
Erzeuge in einer Assembly für einen Standard-Namespace eine beliebige Klasse (z.B. Tools) und definiere dort die folgende Methode (ob die Klasse selbst static ist, hängt von ihrer sonstigen Funktionalität ab):
Code:
public static class Tools {
    /// Standardwert vorbelegen
    static readonly Size focusOffset = new Size(16, 8);
    /// <summary>
    /// Setzt den Mauszeiger auf das angegebene Control.
    /// </summary>;
    /// <param name="ctl">Zu fokussierendes Control-Objekt</param>
    /// <param name="bActive">Festlegung, ob das Control auch ActiveControl werden soll</param>;
    public static void ControlActivate(Control ctl, bool bActive)   {
    Point p = ctl.PointToScreen(new Point());
    if (ctl is ButtonBase)
         p += new Size(ctl.Width / 2, ctl.Height / 2);
    else p += focusOffset;
    Cursor.Position = p;
         // bei Bedarf das Control zum aktiven machen
    if (bActive) {
        // das kann z.B. bei unsichtbaren Controls auch schief gehen
        try { ctl.FindForm().ActiveControl = ctl; }
        catch { ; }
    }
}
Bei dieser Variante steht diese Methode "immer" zur Verfügung, z.B.:
Code:
(Namespace).Tools.ControlActivate( Form2.textBox3, true );
Variante 2: direkt in einem Formular
Wenn diese Funktionalität nur einmal (oder ganz selten) benötigt wird, kann die Methode (plus focusOffset) auch direkt in die entsprechende Klasse kopiert werden; sie muss dann natürlich nicht static sein und kann auch private/protected deklariert werden.

Viel Erfolg bei der Nutzung! Jürgen

[edit=MrSpock]C - Tags eingefügt. Mfg, MrSpock[/edit]
[edit=Chakotay1308]C#-Tag eingefügt. Mfg, Chakotay1308[/edit]
[edit=Chakotay1308]Code von Kharabakh einfließen lassen. Mfg, Chakotay1308[/edit]
  Mit Zitat antworten Zitat
Antwort Antwort

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz