private Point mouse_offset;
private void Control_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
mouse_offset = new Point(-e.X, -e.Y);
}
private void Control_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point mousePos = Control.MousePosition;
mousePos.Offset(mouse_offset.X, mouse_offset.Y);
((Control)sender).Location = ((Control)sender).Parent.PointToClient(mousePos);
}
}
问题如题
我在网上找了这样段代码但是有点看不懂
首先mouse_offset为什么是负值
其次mousePos.Offset(mouse_offset.X, mouse_offset.Y);是移动后控件的位置 但是为什么还是在mousedown是的位置呢
代码是正确的我验证过了。
private void Control_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
mouse_offset = new Point(-e.X, -e.Y);
}
private void Control_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
Point mousePos = Control.MousePosition;
mousePos.Offset(mouse_offset.X, mouse_offset.Y);
((Control)sender).Location = ((Control)sender).Parent.PointToClient(mousePos);
}
}
问题如题
我在网上找了这样段代码但是有点看不懂
首先mouse_offset为什么是负值
其次mousePos.Offset(mouse_offset.X, mouse_offset.Y);是移动后控件的位置 但是为什么还是在mousedown是的位置呢
代码是正确的我验证过了。
解决方案 »
- 请问,这种集合怎么处理
- 第二代身份证阅读器的安装
- 关于listview的问题?
- 怎么选中treeview中的子结点?
- 在MDI主窗体的Load中加载一个子窗体怎么程序直接退出来了?
- 菜鸟提示,为什么我新建控制台应用程序,诺顿会弹出发现病毒的提示???
- datagridview里怎样获取某列的列序号(索引号)
- 能否具体举例说明Application.EnableVisualStyles()这句话的影响?
- 高分请教:如何JAVASCRIPT的函数检测该页面有某个控件,比如说Btn_Print(打印)(100分,不够再加)
- 这样的正则表达式怎么写?
- exchange2007 webdav开发或者webservice开发
- C# 中winForm 全屏与非全屏 切换闪动问题
简单说下,mousedown记录的是控件原始位置.
onmousedown onmouseup onmousemove
搞清楚就简单了
mousePos.Offset(mouse_offset.X, mouse_offset.Y); 这三句结合起来,是把mousePos的坐标转换成控件左上角的屏幕坐标。首先mouse_offset为什么是负值
调用mousePos.Offset(负值);相当于减去 mouse_offset。
private Point offset; private void button1_MouseDown(object sender, MouseEventArgs e)
{
offset = e.Location;
} private void button1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons .Left )
{
int dx = e.X - offset.X;
int dy = e.Y - offset.Y;
button1.Location = new Point(button1.Location.X + dx, button1.Location.Y + dy);
}
}
我描述一下吧。如果鼠标在控件上按下时,在控件上的坐标是(10,20),这是相对于控件左上角的。那么mouse_offset=(-10,-20)。在鼠标保持按下并移动到某一点,鼠标的屏幕坐标变为(150,250),即mousePos = Control.MousePosition =(150,250)。
此时控件左上角的屏幕坐标就应该是(150-10,250-20),即 mousePos.Offset(mouse_offset) = (150-10,250-20)。
最后,需要把控件左上角的屏幕坐标,转换成相对于父容器的相对坐标。
这就是最后一句做的,计算出控件左上角相对于父容器的坐标后,赋值给控件的Location属性,就移动了控件。
((Control)sender).Location = ((Control)sender).Parent.PointToClient(mousePos);
我是新手,谢谢了!!!!!