画像ボックスのサイズを画像のフルサイズに拡大するように、画像ボックスをAutoSizeに設定しています。パネルをプログラムでスクロールさせてAutoSized画像ボックスを表示させるには
画像ボックスはautoScroll = trueのパネルにあり、画像がパネルよりも大きくなるとスクロールバーが表示されます。
ユーザーがイメージ上のドラッグをクリックすると、プログラムでスクロールしてイメージの位置を変更できます。
マウスの最後のX位置とY位置をキャプチャし、マウスの移動量を計算し、パネルの垂直スクロール値と水平スクロール値を調整して、MouseMoveイベントを使用しようとしました。
画像は周囲を移動しますが、場所全体をジャンプし、予期せずスクロールします。
どうすればこの問題を解決できますか?
ここで私は私のマウスイベントに持っているものだ...
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;
}
は私の論理は間違っているか、パネルのスクロール機能の私の理解が間違っていますか?
ありがとうございました。私はこのアプローチに取り組んでいます。 画像ボックスを上端または左端から移動すると、パネルコントロールにスクロールバーが表示されません.-( –
ああ、それは奇妙です。 –