我有一种情况,我想通过在客户区按住鼠标右键来 move 窗体;正如我所说的那样,它的形式是无边界的。
我想“本地” move 它(如果可能的话,否则其他答案也可以)。我的意思是当您在标题栏上按住鼠标左键时它的行为方式(使用鼠标 move 和类似的东西我得到了很多奇怪的行为,但也许只有我这样)。
我已经阅读了很多东西,这篇文章看起来很有帮助
我尝试了各种方式来使用它并观看了 http://msdn.microsoft.com/en-us/library/ff468877%28v=VS.85%29.aspx为了找到其他有用的东西,我想到了 WM_NCRBUTTONDOWN,但是 wndproc 没有检测到它,可能是因为它是由表单处理的?
感谢任何建议,谢谢
弗朗切斯科
最佳答案
public partial class DragForm : Form
{
// Offset from upper left of form where mouse grabbed
private Size? _mouseGrabOffset;
public DragForm()
{
InitializeComponent();
}
protected override void OnMouseDown(MouseEventArgs e)
{
if( e.Button == System.Windows.Forms.MouseButtons.Right )
_mouseGrabOffset = new Size(e.Location);
base.OnMouseDown(e);
}
protected override void OnMouseUp(MouseEventArgs e)
{
_mouseGrabOffset = null;
base.OnMouseUp(e);
}
protected override void OnMouseMove(MouseEventArgs e)
{
if (_mouseGrabOffset.HasValue)
{
this.Location = Cursor.Position - _mouseGrabOffset.Value;
}
base.OnMouseMove(e);
}
}
关于c# - 按住鼠标右键 move 无边界 Winform,可能使用 native 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5827208/