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.
Danke im voraus für Eure Hilfe.
Auch unvollständige Lösungen und ungeprüfte Ideen sind willkommen.
Uwe
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.
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();
}