思路是這樣的.得有三個變數.
記錄x座標: int xPos;
記錄y座標: int yPos;
記錄是否按下滑鼠: bool MoveFlag;
代碼如下 |
複製代碼 |
//在picturebox的滑鼠按下事件裡,記錄三個變數. private void picBox_MouseDown(object sender, MouseEventArgs e) { MoveFlag = true;//已經按下. xPos = e.X;//當前x座標. yPos = e.Y;//當前y座標. } //在picturebox的滑鼠按下事件裡. private void picBox_MouseUp(object sender, MouseEventArgs e) { MoveFlag = false; } //在picturebox滑鼠移動 private void picBox_MouseMove(object sender, MouseEventArgs e) { if (MoveFlag) { picBox.Left += Convert.ToInt16(e.X - xPos);//設定x座標. picBox.Top += Convert.ToInt16(e.Y - yPos);//設定y座標. } } |
這樣就可以實現控制項在容器裡的移動
在pictureBox中拖動圖片的實現代碼 bool wselected = false;
代碼如下 |
複製代碼 |
Point p = new Point(); private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { pictureBox1.Cursor = Cursors.Hand; //按下滑鼠時,將滑鼠形狀改為手型 wselected = true; p.X = e.X; p.Y = e.Y; } int driftX = 0, driftY = 0; int mx = 0, my = 0; private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { if (wselected) { driftX = p.X - e.X; driftY = p.Y - e.Y;
mx = mx - driftX; my = my - driftY;
Bitmap bm = new Bitmap(this.pictureBox1.Image); Graphics g = pictureBox1.CreateGraphics(); g.Clear(pictureBox1.BackColor); g.DrawImage(bm, mx, my); p.X = e.X; p.Y = e.Y; bm.Dispose(); g.Dispose(); } } private void pictureBox1_MouseUp(object sender, MouseEventArgs e) { pictureBox1.Cursor = Cursors.Default; //鬆開滑鼠時,形狀恢複為箭頭 wselected = false; } |