1

我正在使用 Visual Basic 2010 Express。当我将 NumericUpDown 控件添加到窗体时,事件的属性列表未显示 MouseMove 事件。我知道它存在,我可以使用 AddHandler 为它创建一个工作处理程序,但它只是没有出现。它也不会出现在智能感知列表中。

有没有办法“刷新”Visual Studio 以使其包含在内?

4

2 回答 2

1

从它继承自的 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
于 2013-08-28T17:50:07.920 回答
0

您必须知道,即使您设置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);
于 2021-03-22T22:41:58.677 回答