Laden...

Mausrad: Scrollen und Zoomen mit Ctrl/Shift

Erstellt von uwen2 vor 16 Jahren Letzter Beitrag vor 16 Jahren 8.377 Views
U
uwen2 Themenstarter:in
44 Beiträge seit 2007
vor 16 Jahren
Mausrad: Scrollen und Zoomen mit Ctrl/Shift

Hallo allerseits,

ich habe ein Panel mit AutoScroll=True, darin eine PictureBox mit SizeMode=AutoSize. Das Scrollen mit der Maus funktioniert vertikal und horizonal, wenn die PictureBox das Panel in der jeweiligen Richtung überlappt. MouseWheelEvent abfragen funktioniert auch.

Ich möchte nun folgende Funktionalität realisieren:
Ctrl + Mausrad = HorizontalScrollen, Shift + Mausrad = Zoom, <nichts>+Mausrad = VertikalScrollen
Beim Scrollen soll darüber hinaus ein Teil des Bitmaps der PictureBox (Zeilenkopf/Spaltenkopf) in der Scrollrichtung nicht mitwandern, sondern stehen bleiben.

  1. Muß ich das zu Fuß über eigene Scrollbalken machen oder gibt es einen eleganteren Weg?
  2. Wie kann ich die MouseWheel- und die KeyState-Abfrage verbinden?
  3. Hat jemand Erfahrung / ein Beispiel für PictureBox.Scale(), ich bekomme das mit den Faktoren nicht hin, oder muß man über eine Grafik-Matrix zoomen?
  4. Muß man das Stehenbleiben der Zeilen- und Spaltenköpfe mit eigenen Panels/Picturboxes über Anzeigen/Verbergen realisieren oder gibt es eine elegantere Lösung.

Danke im voraus für Eure Hilfe.
Auch unvollständige Lösungen und ungeprüfte Ideen sind willkommen.
Uwe

432 Beiträge seit 2005
vor 16 Jahren

hi uwe,

. Wie kann ich die MouseWheel- und die KeyState-Abfrage verbinden?

ich würde die ereignisse keydown / keyup verwenden, um mir die gedrückten tasten unabhängig vom mausrad zu merken.

U
uwen2 Themenstarter:in
44 Beiträge seit 2007
vor 16 Jahren
Teillösung

Hallo citizen.ron

Danke für Deinen Tip. Mit KeyDown (für das Fenster) lässt sich zwar eine Verarbeitung einschalten, aber mit KeyUp nicht wieder ausschalten.

Ich habe jetzt zumindest für die Tastenbehandlung den u.s.Code (für das Panel) gefunden. Damit wird das horizontale Scrollen nur während des Drückens der Ctrl-Taste beinflußt.
Leider kann ich nicht die vertikale Scrollbewegung ausschalten – ein Tip?
(Math.Abs(e.Delta) dient selbstverständlich nur dem Zweck zu sehen, ob überhaupt etwas passiert, das wird später noch richtig ausgerechnet)

Uwe


        private void PanelGesamtübersicht_MouseWheel(object sender, MouseEventArgs e)
        {
            if (Panel.ModifierKeys == Keys.Control)
            {
                panelGesamtübersicht.HorizontalScroll.Value = Math.Abs(e.Delta);
                panelGesamtübersicht.VerticalScroll.Enabled = false;
            }
        }
        private void picGesamtübersicht_MouseClick(object sender, MouseEventArgs e)
        {
            picGesamtübersicht.Select();
        }

U
uwen2 Themenstarter:in
44 Beiträge seit 2007
vor 16 Jahren