我正在與vb的舊項目。 Net。,在3.5框架中創建。 有一個日期時間選擇器控制。控制不適用於vb。淨winforms
不過,現在我已經再次下降這種控制,但我沒有發現這一點。用4.0控制,
今年,它有上/下箭頭。
我想在點擊下拉菜單時關注年份選擇。 正如你所看到的2015年10月 當我選擇2015年時,它會顯示向下箭頭以增加/減少年份。
幫我弄清楚,我怎麼找到事件,它選擇/集中今年控制時顯示的控件。
我正在與vb的舊項目。 Net。,在3.5框架中創建。 有一個日期時間選擇器控制。控制不適用於vb。淨winforms
不過,現在我已經再次下降這種控制,但我沒有發現這一點。用4.0控制,
今年,它有上/下箭頭。
我想在點擊下拉菜單時關注年份選擇。 正如你所看到的2015年10月 當我選擇2015年時,它會顯示向下箭頭以增加/減少年份。
幫我弄清楚,我怎麼找到事件,它選擇/集中今年控制時顯示的控件。
你應該知道的DateTimePicker
該行爲取決於操作系統,如果你想只有一年選擇,您可以在設計或代碼做到這一點:
Format
到DateTimePickerFormat.Custom
;CustomFormat
to yyyy
;ShowUpDown
至true
;編輯
我們可以模擬點擊年份部分程序,但它會表現不同上是不希望的不同的操作系統。
但是這裏的主要思想對於這種情況可能有用。
在這段代碼中,我們將光標移動到合適的位置的使用代碼進行點擊:
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);
private const int MOUSEEVENTF_LEFTDOWN = 0x02;
private const int MOUSEEVENTF_LEFTUP = 0x04;
public void PerformClick()
{
uint X = (uint)Cursor.Position.X;
uint Y = (uint)Cursor.Position.Y;
mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
}
//Don't forget to attach handler to DropDown event of your `DatePicker`
private void dateTimePicker1_DropDown(object sender, EventArgs e)
{
//wait to dropdown show
System.Threading.Thread.Sleep(500);
//Calculate the point that you want to click
//Change 125 and 5 to tune the location.
var p = new Point(
this.dateTimePicker1.Location.X + 125,
this.dateTimePicker1.Location.Y + this.dateTimePicker1.Height + 5
);
Cursor.Position = this.PointToScreen(p);
PerformClick();
}
這裏是我的系統上的結果:
您是否看到我編輯的問題? – DareDevil
@DareDevil是的,我現在看到它:)你應該知道'DateTimePicker'的行爲取決於操作系統,例如在Windows 8中,如果你點擊年份'DateTimePicker'行爲不同,並顯示一個monthes列表。所以雖然我認爲我們可以通過編程模擬點擊年,但它在不同的操作系統上表現不同,這是不需要的。 –
@DareDevil作爲一個建議,當你想以一種你從未見過的方式做一份工作時,你應該再想一想。 –
你想選擇年只要? –
DateTimePicker的行爲取決於操作系統。 –
不,這個控件沒有問題,但我想說的是,在這個控件中,如果我們用鼠標點擊「2015」的值,用戶界面會發生變化,我可以看到上下箭頭來操縱年份值,我想要的,是,而不是點擊,當我點擊日期時間選擇器控制,通過代碼我強制專注於年份區域,以便用戶可以看到,有一個選項也可以在幾年之間導航。 – DareDevil