我只是想看看我想添加到DateTimePicker
控件的功能是否真的可行。
我想要做的是在用户DateTimePicker
点击显示日期选择器下拉菜单时,他们可以开始输入日期,而不必单击箭头来显示日期选择器。
我没有从 MSDN 看到任何关于此的内容,但我可能错过了,这可能吗?
我只是想看看我想添加到DateTimePicker
控件的功能是否真的可行。
我想要做的是在用户DateTimePicker
点击显示日期选择器下拉菜单时,他们可以开始输入日期,而不必单击箭头来显示日期选择器。
我没有从 MSDN 看到任何关于此的内容,但我可能错过了,这可能吗?
从以编程方式打开 DateTimePicker 控件的日历,您可以尝试以下操作:
Private Sub DateTimePicker1_Enter(ByVal sender As Object, ByVal e As EventArgs) _
Handles DateTimePicker1.Enter
SendKeys.Send("%{DOWN}")
End Sub
要浏览下拉列表,请尝试以下操作:
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 的 DropDown 创建一个扩展,我很抱歉是谁创建了这个,因为我完全忘记了: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
用法是:
Private Sub DateTimePicker1_Enter(sender As System.Object, e As System.EventArgs) Handles DateTimePicker1.Enter
DateTimePicker1.OpenDateTime()
End Sub
就是这样:)