Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使窗口可拖动(C#Winforms)?_C#_.net_Winforms_Draggable - Fatal编程技术网

如何使窗口可拖动(C#Winforms)?

如何使窗口可拖动(C#Winforms)?,c#,.net,winforms,draggable,C#,.net,Winforms,Draggable,我有表格。我已经在表单上启用了透明度,并且删除了它的标题栏和边框。在里面,我创建了一个自定义UI,它具有与窗口相同的功能。基本上,我的想法是创建自定义窗口 一切正常,但只有窗口拖动不起作用。我不知道如何启用它。我在谷歌上搜索这个。但是我没有找到任何有用的信息 请帮助我实现此窗口拖动。我通过捕获mousedown(在mouseup上取消捕获),然后捕获mousemove来实现此行为 只需移动表单坐标(左、上),相当于鼠标移动量(这些事件具有鼠标移动量) 这对我来说效果很好。最简单的方法是处理WM\

我有表格。我已经在表单上启用了透明度,并且删除了它的标题栏和边框。在里面,我创建了一个自定义UI,它具有与窗口相同的功能。基本上,我的想法是创建自定义窗口

一切正常,但只有窗口拖动不起作用。我不知道如何启用它。我在谷歌上搜索这个。但是我没有找到任何有用的信息


请帮助我实现此窗口拖动。

我通过捕获mousedown(在mouseup上取消捕获),然后捕获mousemove来实现此行为

只需移动表单坐标(左、上),相当于鼠标移动量(这些事件具有鼠标移动量)


这对我来说效果很好。

最简单的方法是处理
WM\u nchitest
消息,并为自定义窗口的部分返回
HTCAPTION
,这些部分的工作方式与普通窗口中的标题栏类似。Windows将完成其余工作。

wat关于
mouse
events??尝试使用
鼠标
事件来移动窗口。默认的winform行为是将窗口拖动到标题栏旁,然后将其删除。请注意,当用户看到无栏窗口时,他们不太可能拖动和移动它。如果你仍然想要这个,你必须自己实现它,例如使用Cyril的答案中提供的解决方案
class YourForm : Form
{
     private const int WM_NCHITTEST = 0x84;
     private const int HTCLIENT = 0x1;
     private const int HTCAPTION = 0x2;

     ///
     /// Handling the window messages 
     ///
     protected override void WndProc(ref Message message)
     {
          base.WndProc(ref message);

          if (message.Msg == WM_NCHITTEST && (int)message.Result == HTCLIENT)
               message.Result = (IntPtr)HTCAPTION;
     }
}