首页 / 问答 / C#&.NET Winform桌面程序中Label如何实现同时绑定鼠标拖动窗体和点击事件呢?

C#&.NET Winform桌面程序中Label如何实现同时绑定鼠标拖动窗体和点击事件呢?

C# WINFORM 事件 Event 1.64K 次浏览
0

窗体上有个Label,既想实现:

  • 按住Label拖拽移动整个窗体
  • 又想实现Label单击后执行某个方法

拖拽是通过Label的MouseDown事件进行的
但是在MouseDown里执行formDrag()方法后MouseUp,MouseClick,Click事件都没反应了,代码如下:


 private void label1_MouseDown(object sender, MouseEventArgs e)
  {        
                Console.WriteLine("MouseDown");
                formDrag(this.Handle);//窗体拖拽
 }

 private void label1_Click(object sender, EventArgs e)
  {        //没反应
            Console.WriteLine("Click");
            anotherWork();//单击执行的某个方法
  }

 private void label1_MouseClick(object sender, MouseEventArgs e)
 {        //没反应
           Console.WriteLine("MouseClick");

 }

 private void label1_MouseUp(object sender, MouseEventArgs e)
{        //没反应
          Console.WriteLine("MouseUp");
}

//////拖拽//////
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
[DllImport("user32.dll")]
public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
public const int WM_SYSCOMMAND = 0x0112;
public const int SC_MOVE = 0xF010;
public const int HTCAPTION = 0x0002;
//拖动
public static void formDrag(IntPtr intp)
{
//拖动窗体
ReleaseCapture();
SendMessage(intp, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
}

本问题来自:inform练习遇到的一个问题

回复 [×]
提交评论
请输入评论内容

1 个回答

  • 0

    使用Label的MouseMove事件即可实现按住鼠标拖动的效果,单击事件还是绑定Click。

    效果如下:

    示例代码如下:

    MoveForm.cs

    MoveForm.Designer.cs

    Rector的个人主页

    Rector

    2022-07-07 回答

    我来回答