C# 鼠标拖动问题

来源:百度知道 编辑:UC知道 时间:2024/05/30 03:56:57
我在窗体上有个面板 面板里有个按钮 我想实现拖动按钮 让面板一起动
我用的
private void button1_MouseMove(object sender, MouseEventArgs e)
{

if (e.Button == MouseButtons.Left)
{
panel1.Location = new Point(e.X, e.Y);

}

}
但是有些问题 鼠标按住拖动后 面板不停的颤 有没有什么方法能像拖动窗口标题那样 不颤啊

改成这样就不颤了
private void button1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
panel1.Location = this.PointToClient(panel1.PointToScreen(new Point(e.X, e.Y)));
}
}
关键是你要清楚坐标是相对于哪个控件的。
由于你的button是在panel里边的,所以e.X和e.Y都是相对与panel的坐标,用panel1.PointToScreen(new Point(e.X, e.Y)转换成屏幕坐标,再用
this.PointToClient(panel1.PointToScreen(new Point(e.X, e.Y))转换成相对于form的坐标就ok了

或者用这段,效果更好点
Point _oldPosition = new Point();

private void button1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
//panel1.Location = this.PointToClient(panel1.PointToScreen(new Point(e.X, e.Y)));
panel1.Left += Cursor.Position.X - _oldPosition.X;
panel1.Top += Cursor.Position.Y - _oldPosition.Y;