
親コントロール上に子コントロール(pictureBox1)をのせて、子コントロールのD&Dによる移動や拡大縮小をしたいと思っています。
また、pictureBox1の四隅に小さなpictureBoxA~Dをマーカーとして設置したいと考えております。
動作の具体例として左上のpictureBoxAをドラッグするとしてマウスの移動量に応じてpictureBox1のサイズが変わり、それに追従してマーカーが動くといった感じです。
D&Dでリサイズするところまでは出来ているのですが、マーカーの追従がうまくいきません。
ドラッグの際にマーカーを動かす処理を加えるとpictureBox1がリサイズされなかったので、pictureBox1のリサイズイベントでマーカーを再配置する関数を呼ぶ処理に変えましたが、ドラッグ時にマーカーが震えるような挙動をしてしまっています。
リサイズとマーカーの動きがスムーズの連動する方法についてお知恵を拝借できれば幸いです。
C#
1コード 2 //左上(A) 3 private void pictureBox_A_MouseDown(object sender, MouseEventArgs e) 4 { 5 lastMouseDownPoint = e.Location; 6 lastMouseDownSize = pictureBox1.Size; 7 isDraggable_TopLeft = true; 8 } 9 10 private void pictureBox_A_MouseMove(object sender, MouseEventArgs e) 11 { 12 if (isDraggable_TopLeft == true) 13 { 14 //マウス移動量 15 int diffX = e.X - lastMouseDownPoint.X; 16 int diffY = e.Y - lastMouseDownPoint.Y; 17 18 int w = pictureBox1.Width; //sX 19 //pictureBox1.Width -= diffX;//x方向に対して移動量だけ減算 20 pictureBox1.Width = lastMouseDownSize.Width - diffX; 21 pictureBox1.Left += w - pictureBox1.Width;//L 22 23 int h = pictureBox1.Height; 24 int h_2 = (int)(pictureBox1.Width * (1 / fixedRate)); 25 pictureBox1.Height = h_2; 26 pictureBox1.Top += h - h_2; 27 28 } 29 } 30 31 private void pictureBox_A_MouseUp(object sender, MouseEventArgs e) 32 { 33 34 isDraggable_TopLeft = false; 35 } 36 37 //右上(B) 38 private void pictureBox_B_MouseDown(object sender, MouseEventArgs e) 39 { 40 isDraggable_TopRight = true; 41 lastMouseDownPoint = e.Location; 42 lastMouseDownSize = pictureBox1.Size; 43 } 44 45 private void pictureBox_B_MouseMove(object sender, MouseEventArgs e) 46 { 47 if (isDraggable_TopRight == true) //右上(ok) 48 { 49 //マウス移動量 50 int diffX = e.X - lastMouseDownPoint.X; 51 int diffY = e.Y - lastMouseDownPoint.Y; 52 53 pictureBox1.Width = lastMouseDownSize.Width + diffX;//W 54 55 int h = pictureBox1.Height; 56 int h2 = (int)(pictureBox1.Width * (1 / fixedRate)); 57 pictureBox1.Height = h2; 58 pictureBox1.Top += h - h2; 59 } 60 } 61 62 private void pictureBox_B_MouseUp(object sender, MouseEventArgs e) 63 { 64 isDraggable_TopRight = false; 65 } 66 67 //右下(C) 68 private void pictureBox_C_MouseDown(object sender, MouseEventArgs e) 69 { 70 isDraggable_BottomRight = true; 71 lastMouseDownPoint = e.Location; 72 lastMouseDownSize = pictureBox1.Size; 73 } 74 75 private void pictureBox_C_MouseMove(object sender, MouseEventArgs e) 76 { 77 78 if (isDraggable_BottomRight == true) //右下(ok) 79 { 80 //マウス移動量 81 int diffX = e.X - lastMouseDownPoint.X; 82 int diffY = e.Y - lastMouseDownPoint.Y; 83 pictureBox1.Width = lastMouseDownSize.Width + diffX; 84 pictureBox1.Height = (int)(pictureBox1.Width * (1 / fixedRate)); 85 } 86 } 87 88 private void pictureBox_C_MouseUp(object sender, MouseEventArgs e) 89 { 90 isDraggable_BottomRight = false; 91 } 92 93 //左下 94 private void pictureBox_D_MouseDown(object sender, MouseEventArgs e) 95 { 96 isDraggable_BottomLeft = true; 97 lastMouseDownPoint = e.Location; 98 lastMouseDownSize = pictureBox1.Size; 99 } 100 101 private void pictureBox_D_MouseMove(object sender, MouseEventArgs e) 102 { 103 if (isDraggable_BottomLeft == true) //左下(ok) 104 { 105 //マウス移動量 106 int diffX = e.X - lastMouseDownPoint.X; 107 int diffY = e.Y - lastMouseDownPoint.Y; 108 109 int w = pictureBox1.Width; 110 //pictureBox1.Width -= diffX; 111 pictureBox1.Width = lastMouseDownSize.Width - diffX; 112 pictureBox1.Left += w - pictureBox1.Width; 113 114 pictureBox1.Height = (int)(pictureBox1.Width * (1 / fixedRate)); 115 } 116 } 117 118 private void pictureBox_D_MouseUp(object sender, MouseEventArgs e) 119 { 120 isDraggable_BottomLeft = false; 121 } 122 123 private void pictureBox1_Resize(object sender, EventArgs e) 124 { 125 point_setting();//マーカー再配置 126 }
回答1件
あなたの回答
tips
プレビュー