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;