积极答复者
重写Button.OnMouseMove方法的问题

问题
-
在Button的子类中重写了OnMouseMove方法,代码如下:
public class MyButton : Button { protected override void OnMouseMove(MouseEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) { MessageBox.Show("mouseMoving"); } } //protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) //{ } }
在此按钮上按住鼠标左键移动时, MessageBox.Show("mouseMoving")会执行两次,
如果把重写的OnMouseLeftButtonDown方法(空方法,什么都不做)的注释取消,MessageBox.Show("mouseMoving")就只执行一次,这是什么原因?
答案
全部回复
-
Hi, 如果去掉注释,以下代码其实是把OnMouseLeftButtonDown重写了,在基类的OnMouseLeftButtonDown方法里,是有后续处理(设置状态、引发事件等等)的,如果改成以下代码,相当于把后续处理去掉了,当然会看到和注释掉时不一样的情形。
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) { }
你可以试一下把代码改成这样
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) { base.OnMouseLeftButtonDown(e); }
就会发现无论是否注释掉,程序的表现都一样。
- 已建议为答案 Franklin ChenMicrosoft employee, Moderator 2014年2月21日 3:02