Vb.net DateTimePicker控件在焦点时添加功能
我只是想看看我想添加到Vb.net DateTimePicker控件在焦点时添加功能,vb.net,winforms,datetimepicker,Vb.net,Winforms,Datetimepicker,我只是想看看我想添加到DateTimePicker控件的功能是否切实可行 我想做的是,当用户切换到DateTimePicker时,显示日期选择器下拉列表,这样他们就可以开始输入日期,而不必单击箭头来显示日期选择器 我没有从MSDN上看到这方面的任何内容,但我可能错过了,这可能吗?从,您可以尝试以下内容: Private Sub DateTimePicker1_Enter(ByVal sender As Object, ByVal e As EventArgs) _
DateTimePicker
控件的功能是否切实可行
我想做的是,当用户切换到DateTimePicker
时,显示日期选择器下拉列表,这样他们就可以开始输入日期,而不必单击箭头来显示日期选择器
我没有从MSDN上看到这方面的任何内容,但我可能错过了,这可能吗?从,您可以尝试以下内容:
Private Sub DateTimePicker1_Enter(ByVal sender As Object, ByVal e As EventArgs) _
Handles DateTimePicker1.Enter
SendKeys.Send("%{DOWN}")
End Sub
要在下拉列表中使用tab键,请尝试以下操作:
Private Sub DateTimePicker1_KeyDown(ByVal sender As Object, _
ByVal e As KeyEventArgs) _
Handles DateTimePicker1.KeyDown
If e.KeyCode = Keys.Tab Then
SendKeys.Send("%{F4}")
Me.SelectNextControl(DateTimePicker1, True, True, True, True)
End If
End Sub
在C#中,您可以创建一个扩展来下拉DateTimePicker,很抱歉是谁创建了它,因为我完全忘记了:D
public static void OpenDateTime(this DateTimePicker obj)
{
const int WM_LBUTTONDOWN = 0x0201;
int width = obj.Width - 10;
int height = obj.Height / 2;
int lParam = width + height * 0x00010000; // VooDoo to shift height
PostMessage(obj.Handle, WM_LBUTTONDOWN, 1, lParam);
}
用法:
private void dateTimePicker1_Enter(object sender, EventArgs e)
{
dateTimePicker1.OpenDateTime();
}
下面是VB.NET,首先需要创建一个模块并粘贴此代码
Imports System.Runtime.CompilerServices
Imports System.Runtime.InteropServices
Module Module1
<DllImport("user32.dll", CharSet:=CharSet.Auto)> _
Private Function PostMessage(hwnd As IntPtr, wMsg As Int32, wParam As Int32, lParam As Int32) As Integer
End Function
<Extension()>
Public Sub OpenDateTime(obj As DateTimePicker)
Const WM_LBUTTONDOWN As Integer = &H201
Dim width As Integer = obj.Width - 10
Dim height As Integer = obj.Height / 2
Dim lParam As Integer = width + height * &H10000
PostMessage(obj.Handle, WM_LBUTTONDOWN, 1, lParam)
End Sub
End Module
就是这样:)打开日期选择器效果很好,如果用户决定通过控件进行制表,是否有办法关闭它?目前,它可以正常打开,但除非选择了日期,否则不会让我通过标签查看它。我已经尝试通过代码发送Esc键来取消日期选择器和提前制表符,但似乎无法使其正常工作。是否还有另一个SendKey来关闭日期选择器?我在进行选项卡切换时遇到问题,日期选择器日历仍处于活动状态。也许,如果我能理解我发送的键在datepicker控件中的作用,我就能更好地理解发生了什么。(“%$DOWN}”)和(“%$F4}”)对控件到底做了什么?是否有我可以研究的链接?@Criel Down是向下箭头键,如果你在DateTimePicker控件上按下它,它将下拉日历。F4是F4,如果日历打开,它会关闭日历。这段代码对我很有用,因为我在表单上也有可选项卡控件。
Private Sub DateTimePicker1_Enter(sender As System.Object, e As System.EventArgs) Handles DateTimePicker1.Enter
DateTimePicker1.OpenDateTime()
End Sub