Wie kann ich dazu beitragen, dass ein panel zu Blättern programmgesteuert zu setzen Ihren AutoSized Bild box

Ich habe eine picture box-set auf AutoSize, so dass das Bild zwingt zu wachsen, um das Bild in voller Größe.

Die Bild-box ist in ein panel mit autoScroll = true, so dass die Bildlaufleisten angezeigt, wenn das Bild größer ist als das panel.

Wie kann ich programmatisch scrollen Sie das Bedienfeld an, wenn der Benutzer auf die drags auf dem Bild, damit der Neupositionierung des Bildes.

Ich habe versucht, verwendet das MouseMove-Ereignis die Erfassung der letzten X-und Y-Positionen der Maus, um zu berechnen, wie viel die Maus bewegt hat, und justiert die Vertikale und Horizontale Scroll-Werte der Platte.

Dem bewegt sich das Bild um, aber es springt ganz über dem Platz, und Schriftrollen unvorhersehbar.

Wie kann ich das erreichen?

Hier ist, was ich in meiner Maus-events...

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    if (dragging)
    {
        if (e.Button == MouseButtons.Left)
        {
            //move the image inverse to direction dragged
            int horizontalChange = (e.X - startingX) * -1;  
            int newHorizontalPos = panel1.HorizontalScroll.Value + horizontalChange;

            if (newHorizontalPos < panel1.HorizontalScroll.Minimum)
            {
                newHorizontalPos = panel1.HorizontalScroll.Minimum;
                horizontalChange = 0;
            }

            if (newHorizontalPos > panel1.HorizontalScroll.Maximum)
            {
                newHorizontalPos = panel1.HorizontalScroll.Maximum;
                horizontalChange = 0;
            }

            panel1.HorizontalScroll.Value = newHorizontalPos;

            int verticalChange = (e.Y - startingY);
            //move the image inverse to direction dragged
            int newverticalPos = panel1.VerticalScroll.Value + verticalChange * -1;  

            if (newverticalPos < panel1.VerticalScroll.Minimum)
            {
                newverticalPos = panel1.VerticalScroll.Minimum;
                verticalChange = 0;
            }

            if (newverticalPos > panel1.VerticalScroll.Maximum)
            {
                newverticalPos = panel1.VerticalScroll.Maximum;
                verticalChange = 0;
            }

            panel1.VerticalScroll.Value = newverticalPos;
        }
    }

    startingX = e.X;
    startingY = e.Y;
}

Ist meine Logik falsch oder ist mein Verständnis von der Jury-scrolling-Funktionalität falsch?

Schreibe einen Kommentar