2012-12-21 21 views
3

我只是想看看我想添加到DateTimePicker控件的功能是否可行。DateTimePicker控件在聚焦時添加功能

我想要做的是在用戶跳轉到DateTimePicker時顯示日期選擇器下拉菜單,以便他們可以開始輸入日期,而不必單擊箭頭使日期選擇器顯示。

我從MSDN上看不到任何東西,但我可能錯過了它,這可能嗎?通過降

Private Sub DateTimePicker1_Enter(ByVal sender As Object, ByVal e As EventArgs) _ 
            Handles DateTimePicker1.Enter 
    SendKeys.Send("%{DOWN}") 
End Sub 

要向下跳,嘗試這樣的事情:

回答

2

Programmatically open the calendar of the DateTimePicker control,你可以試試這個

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 
+0

謝謝!這很好用! – Criel

+0

打開日期選擇器效果很好,如果用戶決定通過控件選項卡,是否有辦法關閉它?目前,它打開罰款,但不會讓我選中,除非選擇一個日期。我試過通過代碼發送Esc鍵來取消日期選擇器和選項卡,但似乎無法使其正常工作。還有另一個SendKey關閉日期選取器嗎? – Criel

+0

@Criel更新答案。 – LarsTech

1

在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 

和用法是:

Private Sub DateTimePicker1_Enter(sender As System.Object, e As System.EventArgs) Handles DateTimePicker1.Enter 
    DateTimePicker1.OpenDateTime() 
End Sub 

和that`s吧:)