基本上,我有一个表单,我可以通过点击鼠标来移动Mouse_Down
,并且此表单在中间显示一些标签,显示一些文本。问题在于当标签框架内发生点击时,表单不会移动,并且当我禁用标签时,表单会移动,但当文本颜色应该是白色时,文本颜色会变为黑色。如何在标签内点击鼠标时移动窗体? C#
-1
A
回答
2
这是标准的代码我使用(当我有一个无国界的形式):
using System.Runtime.InteropServices;
..
public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;
[DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();
private void YourLabel_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
ReleaseCapture();
SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}
}
我觉得这假货曾触及窗体的标题栏。
当然,您可以将任意数量的其他控件(包括窗体)中的MouseDown
事件挂接到此代码。
3
解决办法有两个:
1.
通过重写表单的Control.PreProcessMessage
写消息预处理方法。在这种方法中,你必须处理Windows消息,这并不难,但你必须习惯它。 pinvoke.net可以在这里帮助很多。
2.
添加MouseDown
事件处理程序,所有的控件在你的形式,像这样:
foreach(Control control in this.Controls)
{
control.MouseDown += myMouseDownHandler;
}
myMouseDownHandler
将主要是您使用窗体本身同样的方法。 如果表单包含嵌套控件(如面板或用户表单),则必须扩展循环,以便它还处理表单控件的子控件。
如果你的表单中唯一的控件是这个实例,那么当然你不需要循环。
相关问题
- 1. 移动鼠标点击
- 2. C#鼠标移动和点击相对于活动窗口
- 3. 鼠标点击标签
- 4. Windows窗体,WPF鼠标点击事件
- 5. 窗体忽略一些鼠标点击
- 6. 窗体顶部和鼠标移动
- 7. 用鼠标点击更新tkinter标签
- 8. 如何在鼠标点击时淡出鼠标,当鼠标被点击并拖动然后熄灭?
- 9. 基于鼠标点击的移动XNA
- 10. 用鼠标点击移动精灵
- 11. 如何模拟鼠标移动和鼠标单击使用C或C++的Mac
- 12. 获取tchart协调鼠标移动值/点击/鼠标按下
- 13. 问题与鼠标移动/鼠标点击事件
- 14. 当鼠标移至内部元素时丢失鼠标移动
- 15. 点击窗口移动后的坐标
- 16. 在鼠标移动过程中如何防止点击
- 17. 检测鼠标点击时的移动,并检测双击
- 18. C#点击标签
- 19. 如何在鼠标左键按下时检测鼠标移动?
- 20. OpenGL在C++中鼠标点击时获得光标坐标
- 21. 在鼠标移动时移动div
- 22. 获取鼠标光标在窗体边界点击时的位置
- 23. div标签,在鼠标点击时向下打开
- 24. 如何在使用鼠标移动时捕捉QWidget几何体?
- 25. 鼠标移动:点击精灵“散步”点击
- 26. 用鼠标点击滑动
- 27. 如何在点击时加粗标签?
- 28. 禁用鼠标移动和点击使用C#窗口应用程序
- 29. 如何在调整窗口大小时使用鼠标点击图像坐标?
- 30. 中鼠标点击链接打开新标签只有ASP C#
[This](http://stackoverflow.com/a/11043661/815938)是第一种方法的一个例子。 – kennyzx