이미지 크기가 이미지의 전체 크기로 커지도록 그림 상자를 자동 크기로 설정했습니다.어떻게 자동으로 그림 상자를 노출하도록 패널을 스크롤 할 수 있습니까?
그림 상자는 그림이 패널보다 클 때 스크롤 막대가 표시되도록 autoScroll = true 인 패널에 있습니다.
사용자가 이미지의 끌기를 클릭하여 이미지의 위치를 변경함으로써 프로그래밍 방식으로 패널을 스크롤하는 방법은 무엇입니까?
MouseMove 이벤트를 사용하여 마우스의 마지막 X 및 Y 위치를 캡처하고 마우스의 이동량을 계산하고 패널의 수직 및 수평 스크롤 값을 조정 해 보았습니다.
이미지가 주위를 움직이지만 장소를 뛰어 넘어 예기치 않게 스크롤됩니다.
내가 어떻게 이것을 달성 할 수 있습니까?
여기에 내 마우스 이벤트에이 무슨 ...
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;
}
내 논리는 잘못인가, 아니면 패널의 스크롤 기능에 대한 이해가 잘못?
감사합니다. 나는이 접근법을 연구하고있다. 그림 상자를 왼쪽이나 위쪽으로 이동하면 패널 컨트롤에 스크롤 막대가 표시되지 않습니다. - –
오, 이상합니다. 자동 스크롤이 켜져 있어야합니다. –