画像ボックスをAutoSizeに設定して、画像が画像をフルサイズに拡大するようにしました。
画像ボックスは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;
}
私のロジックが間違っていますか、それともパネルのスクロール機能の理解が間違っていますか?