Mam ustawione na obrazku pole AutoSize, aby obraz zmusił go do powiększenia do pełnego rozmiaru obrazu.Jak można spowodować, że panel przewija się programowo, aby odsłonić jego okno z autouzupełnianym obrazem?
Skrzynka z obrazkami znajduje się w panelu z funkcją autoScroll = true, dzięki czemu paski przewijania są wyświetlane, gdy obraz jest większy niż panel.
Jak programowo przewinąć panel, gdy użytkownik kliknie przeciągnięcia obrazu, zmieniając położenie obrazu.
Próbowałem użyć zdarzenia MouseMove, przechwytując ostatnie pozycje X i Y myszy, obliczając ruch myszy i dostosowując pionowe i poziome wartości przewijania panelu.
Przesuwa obraz, ale przeskakuje w każdym miejscu i przewija się nieprzewidywalnie.
Jak mogę to osiągnąć?
Oto co mam w moich zdarzeń myszy ...
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;
}
Czy moja logika źle lub jest moje rozumienie przewijania funkcjonalności panelu źle?
Dzięki. Pracuję z tym podejściem. Panel sterowania nie pokazuje pasków przewijania, jeśli przesuwasz ramkę graficzną z górnej lub lewej strony :-( –
To dziwne - naprawdę powinno się, jeśli masz włączony AutoScroll. –