我正在使用 Visual Basic 2010 Express。当我将 NumericUpDown 控件添加到窗体时,事件的属性列表未显示 MouseMove 事件。我知道它存在,我可以使用 AddHandler 为它创建一个工作处理程序,但它只是没有出现。它也不会出现在智能感知列表中。
有没有办法“刷新”Visual Studio 以使其包含在内?
我正在使用 Visual Basic 2010 Express。当我将 NumericUpDown 控件添加到窗体时,事件的属性列表未显示 MouseMove 事件。我知道它存在,我可以使用 AddHandler 为它创建一个工作处理程序,但它只是没有出现。它也不会出现在智能感知列表中。
有没有办法“刷新”Visual Studio 以使其包含在内?
从它继承自的 UpDownBase 控件的源代码:
[EditorBrowsable(EditorBrowsableState.Never)]
[Browsable(false)]
public new event MouseEventHandler MouseMove
微软决定不公开。我猜的原因是,在该控件上使用 MouseMove 事件做任何事情是没有意义的。它是一个由 TextBox 和一些按钮组成的复合控件。
如果公开该事件很重要,则必须从 NumericUpDown 控件继承并自己公开该事件:
public class MyUpDown : NumericUpDown {
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
public new event MouseEventHandler MouseMove {
add { base.MouseMove += value; }
remove { base.MouseMove -= value; }
}
}
和 VB.Net 版本:
Public Class MyUpDown
Inherits NumericUpDown
<Browsable(True)> _
<EditorBrowsable(EditorBrowsableState.Always)> _
Public Shadows Event MouseMove(sender As Object, e As MouseEventArgs)
Protected Overrides Sub OnMouseMove(e As MouseEventArgs)
MyBase.OnMouseMove(e)
RaiseEvent MouseMove(Me, e)
End Sub
End Class
您必须知道,即使您设置MouseMove
和控制MouseLeave
事件NumericUpDown
,它们也不会正常工作。如果你真的想处理NumericUpDown
's 的文本框鼠标事件,你应该将它设置为NumericUpDown
'Controls
集合的第二个元素(它将成为TextBox
一部分)。
像这样(C# 语法):
myNumericUpDown->Controls[1]->MouseLeave += gcnew System::EventHandler(this, &Form1::myNumericUpDown_MouseLeave);
myNumericUpDown->Controls[1]->MouseMove += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::myNumericUpDown_MouseMove);