Frage

Ich habe ein Panel auf meiner Form mit Autoscroll auf true gesetzt, so eine Scrollbar erscheint automatisch.

Wie kann ich es machen, so kann ein Benutzer seine Mausrad verwenden, um die Platte zu bewegen? Dank SO.

War es hilfreich?

Lösung

Die Platte oder eine Steuerung in der Platte muss Fokus haben. Beachten Sie, dass, wenn die Steuerung mit Fokus Scrollbalken hat, wird es statt der Platte bewegen.

Andere Tipps

Was für mich gearbeitet wurde hinzugefügt panel1_MouseEnter Eventhandler:

private void panel1_MouseEnter(object sender, EventArgs e)
{
    panel1.Focus();
}

Im Folgenden Code funktioniert für mich .....

    Public Form
{
InitializeComponent();  
this.MouseWheel += new MouseEventHandler(Panel1_MouseWheel);
}

 private void Panel1_MouseWheel(object sender, MouseEventArgs e)
        {
         panel1.Focus();
         }

In der Designer-Datei können Sie die folgende Codezeile hinzuzufügen. das Mousewheel-Ereignis wird in Ereignisliste im Eigenschaftenfenster nicht doumented.

this.Panel1.MouseWheel+= System.Windows.Forms.MouseEventHandler(this.Panel1_MouseWheel);

Panel1_MouseWheel wird ausgelöst, wenn Sie die Maus weel rollen

Fügen Sie den Code in der CS-Datei

Stellen Sie sicher, dass Ihr Panel Fokus hat. Und das ist einfach Code Ihres Panel Scrollbar zu blättern. Ich hoffe das hilft. :)     Code eingeben hier

        if(e.Delta > 0)
        {

            if (pnlContain.VerticalScroll.Value - 2 >= pnlContain.VerticalScroll.Minimum)
                pnlContain.VerticalScroll.Value -= 2;
            else
                pnlContain.VerticalScroll.Value = pnlContain.VerticalScroll.Minimum;
        }
        else
        {
            if (pnlContain.VerticalScroll.Value + 2 <= pnlContain.VerticalScroll.Minimum)
                pnlContain.VerticalScroll.Value += 2;
            else
                pnlContain.VerticalScroll.Value = pnlContain.VerticalScroll.Maximum;
        }

Ich bin mit einem Windows Form mit Border auf none gesetzt, wo ich ein Panel verwenden, um alle in meine Kontrollen haben, so ist es sieht nett aus (Farbdifferenz und so ..) wurde das gleiche Problem habe, während ich andere Formen hatte, dass hat gut funktioniert.

Was habe ich vergessen:

   public myForm()
   {
        InitializeComponent();
        this.DoubleBuffered = true;
   }

DoubleBuffered ist magisch ich bemerkt ..

das Scroll-Rad bewegen sollte die Mousemove-Ereignis Kontrolle auslösen. Das MouseEventArgs Argument hat eine Eigenschaft mit dem Namen Delta, die die (signiert) Anzahl der Kerben gibt, dass das Mausrad bewegt hat. Sie können diese Eigenschaft verwenden, um das Panel zu scrollen.

Die Lösung (oben) von Beam022 vorgesehen funktionierte für mich, während viele der anderen Lösungen nicht. In meinem Fall war ich versuche, ein Datagridview-Steuerelement mit dem Mausrad Ereignisse zu blättern.

Der DataGridView_MouseWheel Event-Handler genannt wurde, aber der FirstDisplayedScrollingRowIndex Wert nie geändert. Der Wert war immer ‚0‘ auch nach dem explizit auf 1. Es ist, als ob die Eigenschaft nur gelesen wurde.

Still Repro in .Net Framework 4.6.

In meinem Fall der gesamte Client-Bereich des Panels von Usercontrols besetzt war (nicht ein einzelne Pixel des inneren Bereichs sichtbar, mit Ausnahme der Bildlaufleisten).

In diesem Fall wird die Platte nicht die Maus-Ereignisse nicht erhalten und wird nie konzentrieren (apperently, auf dem Scrollbar klicken zählt nicht als „innerhalb der Tafel zu sein“).

Ich hatte die folgenden Zeilen an den Konstruktor meiner Usercontrol abgeleiteten Klasse hinzuzufügen:

MouseEnter += delegate {
   Parent?.Focus();
};

Jetzt funktioniert es gut, da ich keine scrollbaren Inhalt in den Benutzersteuerelemente haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top