C#: 要把容器内的某个控件 在运行后随便拖动,该怎么做啊?
2013-06-23
你可以就利用控件的这三个事件来实现鼠标拖动某个控件.
如:
1.新建一窗体.
2.在窗体画一个button控件.
3.在button控件的MouseMove,MouseDown,MouseUp三事件方法里分别写下这样的代码:
bool _isPressed=false;
Point _position=new Point(0,0);
private void button_MouseMove(object sender,EventArgs e)
{
if(_isPressed)
{
_position.X=e.X;
_position.Y=e.Y;
this.button.Location=_position;
}
}
private void button_MouseDown(object sender,EventArgs e)
{
_isPressed=true;
}
private void button_MouseUp(object sender,EventArgs e)
{
_isPressed=false;
}
在这里写代码可能会写错部分代码.
不过这是一种比较普通用法的思路.
希望对你有用.
下面演示了如何动态创建和拖动控件位置(运行时)。
调用下面代码的 〈给控件添加移动功能〉方法,就能让控件在运行时用右键拖动。
private void 给控件添加移动功能(Control 控件) {
控件.MouseDown += 按钮_MouseDown;
控件.MouseUp += 按钮_MouseUp;
控件.MouseMove += 按钮_MouseMove;
}
private Point 鼠标位置1, 鼠标位置2, 窗体位置1, 窗体位置2;
private bool 按下鼠标 = false;
public static bool 允许拖动 = true;
private void 按钮_MouseDown(object sender, MouseEventArgs e) {
if (允许拖动) {
if (e.Button == MouseButtons.Right) {
按下鼠标 = true;
鼠标位置1 = Control.MousePosition;
Control c = sender as Control;
窗体位置1 = c.Location;
}
}
}
private void 按钮_MouseMove(object sender, MouseEventArgs e) {
if (允许拖动 && 按下鼠标) {
鼠标位置2 = Control.MousePosition;
窗体位置2.X = 鼠标位置2.X - 鼠标位置1.X + 窗体位置1.X;
窗体位置2.Y = 鼠标位置2.Y - 鼠标位置1.Y + 窗体位置1.Y;
Control c = sender as Control;
c.Location = 窗体位置2;
窗体位置1 = 窗体位置2;
鼠标位置1 = 鼠标位置2;
坐标显示.Visible = true;
var p = this.PointToScreen(this.Location);
坐标显示.Location = new Point(c.Location.X, c.Location.Y - 坐标显示.Height);
坐标显示.BackColor = Color.LightSeaGreen;
坐标显示.Text = string.Format("{0:0},{1:0}", c.Location.X, c.Location.Y);
}
}
private void 按钮_MouseUp(object sender, MouseEventArgs e) {
if (允许拖动) {
if (e.Button == MouseButtons.Right) {
按下鼠标 = false;
}
坐标显示.Visible = false;
}
}
2013-06-23