只有当按下左键单击捕获鼠标移动事件

我需要更新只控制只要鼠标移动在它与鼠标左键按下。 我通常会简单地检查e.Button属性,但它是在MouseEnter事件不可用。

void MyControl_MouseEnter(object sender, EventArgs e) { // MouseEventArgs needed to check this // if (e.Button == MouseButtons.Left) // { // update MyControl // } }

你将如何做到这一点?

--------------解决方案-------------

使用静态Control.MouseButtons属性。 例如:

private void panel1_MouseEnter(object sender, EventArgs e) {
if (Control.MouseButtons == MouseButtons.Left) {
// etc...
}
}

这是很难得去,无论用户点击来获得压制是要捕捉鼠标,防止控制的MouseEnter事件烧制而成的鼠标按钮。 这也是用户界面,是完全不可发现给用户。 一定要考虑一个更好的捕鼠器。

这里有一个(原油)的方式来做到这一点。 它将改变窗体的标题文本任何鼠标按钮被按下,你拖着你的鼠标上Button1以。 您可以参考Control.MouseButtons ,看看哪些按钮处于按下状态。 这里有一些MSDN更多信息。

public partial class Form1 : Form
{
MouseButtons _buttons;

public Form1()
{
InitializeComponent();

}

private void button1_MouseMove(object sender, MouseEventArgs e)
{
if (_buttons != System.Windows.Forms.MouseButtons.None)
{
this.Text = _buttons.ToString();
}
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
_buttons = Control.MouseButtons;
}
}

我发现这里的SO另一个问题的答案:

我怎样才能检测过一个PictureBox一个按住鼠标按钮?

您将需要使用过滤器。 实施PreFilterMessage的IMessageFilter接口,并使用分配的一个实例Application.AddMessageFilter

您将有自己的解读窗口消息...这是不是一种困难的,但它会需要一些工作。

实现可以是这样的:

if (m.Msg == 0x200)
{
int x, y;
x = m.LParam.ToInt32() & 0xFFFF;
y = m.LParam.ToInt32() >> 16;
if ((m.WParam.ToInt32() & 2) != 0)
{
// here, the left mouse button is pressed, and you can use the coords
// and see if the mouse is over the control you want.
}
}

我刚刚实施的东西今天这个样子,只有在Chrome测试,但相当不错的作品。 基本概念是,你捕捉鼠标移动鼠标按下只和MouseUp之间,具体如下:

var image = document.getElementById('my_image');
image.addEventListener('mousedown', function(e) {
e.currentTarget.addEventListener('mousemove', doMyStuff);
});
image.addEventListener('mouseup', function(e) {
e.currentTarget.removeEventListener('mousemove', doMyStuff);
});

function doMyStuff(e) {
// do what you want, the mouse is moving while the user is holding the button down
}

分类:C# 时间:2012-12-04 人气:0
本文关键词: .NET,事件的WinForms
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.283 (s). 10 q(s)