2011-01-28 112 views
2

我需要在.NET Framework的标准事件中不存在的事件。例如,当鼠标左键向下时,鼠标移动。按下按钮时移动鼠标会引发什么事件?

我还需要改变一些行为。例如,我有一些按钮,我想在鼠标左键关闭的同时更改光标所在的每个背景图像,但是当我点击一个按钮并按住鼠标左键时,当我移动鼠标时其他按钮不会引发任何事件。

我该怎么办?我如何创建新的事件?我如何改变行为?

任何帮助表示赞赏。

+6

这是WPF或Windows窗体? – 2011-01-28 10:27:50

+1

我编辑这个修复你的英文错误。 (我希望这不会冒犯你 - 我只是想帮助:))。一旦主持人批准,编辑应该可见。 – 2011-01-28 10:53:38

回答

5

你的问题给出是,当MouseDown事件上的按钮时,该按钮“捕获”鼠标,直到松开按钮不松开,这意味着MouseMove事件不会被其他按钮接收。

有一些代码from here这可以帮助:

// Assuming all buttons subscribe to this event: 
private void buttons_MouseMove (object sender, MouseEventArgs e) 
{ 
    if (e.Button == System.Windows.Forms.MouseButtons.Left) 
     { 
     Control control = (Control) sender; 
     if (control.Capture) 
     { 
      control.Capture = false; 
     } 
     if (control.ClientRectangle.Contains (e.Location)) 
     { 
      Control.BackgroundImage = ...; 
     } 
    } 
    } 
3

MouseMove-Event有一个名为'Button'的属性,告诉你哪个按钮被按下。因此,所有你需要做的就是这样的事情:

void panel1_MouseMove(Object sender, System::Windows::Forms::MouseEventArgs e) { 

    if(e.Button = MouseButtons.Left){ 
     //Do what you want when mouse_move with left button pressed  
    }  
} 

上面的代码没有经过测试,我没有抬头属性的正确拼写等,只要给它一点点尝试在智能感知/ MSDN。

你可以找到在MSDN甚至更多的信息: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.mousemove%28v=vs.71%29.aspx

对于第二个问题,只是试图找到一个合适的事件或改写的WindowProc-事件功能那里你可以听WindowMessages并获取你需要 - 更多的信息上http://msdn.microsoft.com/en-us/library/ms633573%28v=VS.85%29.aspxhttp://www.pinvoke.net