MCa*_*tle 5 .net vb.net datetimepicker winforms
我需要确定日历下拉列表当前是否显示在 WinForms DateTimePicker 中。我有一个从 DateTimePicker 继承的自定义控件,并且我正在处理 KeyDown 事件以使用导航键执行操作,但是如果日历下拉列表打开,我想绕过该代码,以便用户可以在那里使用他们的导航键。
使用 ComboBox 控件,很容易使用.DroppedDown属性来检查它是否打开,但 DateTimePicker 没有这样的属性。
我目前正在做以下事情:
Private _isDroppedDown As Boolean = False
Private Sub MyDateTimePicker_CloseUp(sender As Object, e As EventArgs) Handles Me.CloseUp
_isDroppedDown = False
End Sub
Private Sub MyDateTimePicker_DropDown(sender As Object, e As EventArgs) Handles Me.DropDown
_isDroppedDown = True
End Sub
Run Code Online (Sandbox Code Playgroud)
但是,我想知道是否有比使用变量手动跟踪它更好的方法来获取控件的 DroppedDown 状态?
您所做的对于一次性实例来说是很好的,但是如果您的表单/类包含多个控件,则使用变量跟踪所有控件可能会变得笨拙且难以遵循。
一种简单的替代方法是使用控件的.Tag属性来记录变量状态并进行测试。然而,更好的方法是创建您自己的类来继承控件并添加您想要的属性,几乎使用您已有的相同代码。因此,在您的情况下,您将使用以下代码添加一个名为“MyDateTimePicker”的类:
Public Class MyDateTimePicker
Inherits DateTimePicker
Dim _isDroppedDown As Boolean = False
Public Property IsDroppedDown() As Boolean
Get
IsDroppedDown = _isDroppedDown
End Get
Set(value As Boolean)
_isDroppedDown = value
End Set
End Property
Private Sub MyDateTimePicker_CloseUp(sender As Object, e As System.EventArgs) Handles Me.CloseUp
_isDroppedDown = False
End Sub
Private Sub MyDateTimePicker_DropDown(sender As Object, e As System.EventArgs) Handles Me.DropDown
_isDroppedDown = True
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
下一次构建后,新的 MyDateTimePicker 类应该出现在项目的“组件”选项卡下的工具箱中。它将具有与 DateTimePickers 关联的所有常用事件、方法和属性,以及您的新.IsDroppedDown属性。
哦,如果你经常使用它,你可以将它创建为一个新的类库,然后简单地将它构建的 DLL 包含在你的项目中。
| 归档时间: |
|
| 查看次数: |
2708 次 |
| 最近记录: |