我創建了我自己的MonthCalendar(選擇多個事物和更多更改),我想與DateTimePicker一起使用它。採取DateTimePicker,當點擊右鍵時,它顯示我的自定義日曆。有沒有簡單的方法?或者我應該自己創建一切,如本教程:http://www.techpowerup.com/forums/showthread.php?t=70925 謝謝C#DateTimePicker更改MonthCalendar
回答
這是一個小黑客,但它應該工作得很好。
首先我們檢查OnSizeChanged我們有什麼按鈕,大(帶圖標)或小(無圖標)。如果它的大按鈕按鈕有一個35像素,小有18像素。
然後我們聽窗口消息。如果發生錯誤,我們會檢查用戶點擊了哪個位置。因此我們將lParam轉換爲X/Y位置。如果X位置在按鈕區域,我們將轉到我們的自定義方法並顯示我們的日曆。在我們從方法返回的方法之後,或者DateTimePicker也會顯示它自己的日曆。
另外,我們重寫ShowUpDown屬性並設置它可瀏覽(false)。但是我們也可以檢查ShowUpDown是否爲true,並讓DateTimePcker在這種情況下處理點擊。
下面是代碼:
class DateTimePickerEX : DateTimePicker {
const int WM_MOUSEDOWN = 0x201;
int paddingright = 0;
protected override void OnSizeChanged(EventArgs e) {
base.OnSizeChanged(e);
int textwidth = 0;
using (Graphics g = this.CreateGraphics()) {
textwidth = (int)g.MeasureString(this.Text, this.Font).Width;
}
if (textwidth > this.Width - 35 - 22) {
paddingright = 18;
} else {
paddingright = 35;
}
}
protected override void WndProc(ref Message m) {
if (m.Msg == WM_MOUSEDOWN) {
DWORD dw = new DWORD(m.LParam);
int x = dw.HI;
int y = dw.LO;
if (x > this.Width - paddingright) {
OnButtonClick();
return;
}
}
base.WndProc(ref m);
}
[EditorBrowsable(EditorBrowsableState.Never), Browsable(false)]
public new bool ShowUpDown {
get;
set;
}
private void OnButtonClick() {
//-----------------------------------
//#### Show your MonthCalendar ####
//-----------------------------------
}
[StructLayout(LayoutKind.Explicit)]
struct DWORD {
[FieldOffset(0)]
public int Word;
[FieldOffset(0)]
public short HI;
[FieldOffset(2)]
public short LO;
public DWORD(IntPtr word) {
this.HI = 0;
this.LO = 0;
this.Word = (int)word;
}
public static DWORD Empty {
get {
return new DWORD() {
Word = 0
};
}
}
}
}
這是我想要一個可以幫助我顯示monthcalendar嗎?我正在做這個.Controls.Add(日曆);但它是在datepicker中的小文本框。我知道這是因爲它不是窗體,但我真的把控制權添加到那個小窗口,但我怎麼才能顯示它rigth,謝謝 –
我發現它,我希望它應該this.Parent ... –
你不應該添加如果您想要與原始月份日曆相同的行爲(如果neseccary/required需要在表單外部顯示月份日曆,並且如果用戶在其他地方單擊時隱藏),那麼需要控制它。您可以使用ToolStripDropDown並使用ToolStripControlHost添加MonthCalendar。另一種方法是創建一個擁有全局鉤子的自己的形式,而不會偷竊焦點。 – Wowa
- 1. Synchronize MonthCalendar和Datetimepicker
- 2. 在C#中,monthCalendar更新!
- 3. C月MonthCalendar#
- 4. 在DateTimePicker,C#中更改日曆類型?
- 5. 更改DateTimePicker的值
- 6. DateTimePicker類更改範圍
- 7. 更改datetimepicker顯示日期
- 8. 更改datetimepicker的時區
- 9. Django Datetimepicker更改圖標
- 10. C#DateTimePicker
- 11. C#datetimepicker在更改日期前讀取值
- 12. 更改DateTimePicker中按鈕的大小C++ builder
- 13. 使用引導更改的Datetimepicker
- 14. VB.NET事件datetimepicker檢查更改
- 15. 更改日期格式自舉的DateTimePicker
- 16. 檢查值更改或不在datetimepicker
- 17. 在更改驗證字段 - datetimepicker
- 18. Bootstrap Datetimepicker更改事件未觸發
- 19. 在事件中更改jquery datetimepicker格式
- 20. 更改事件引導datetimepicker的格式
- 21. 更改語言引導的DateTimePicker
- 22. 如何更改/設置DateTimePicker值
- 23. 引導datetimepicker動態更改格式
- 24. Kendo DateTimePicker在提交後更改格式
- 25. 更改jquery引導datetimepicker動態mindate
- 26. Bootstrap Datetimepicker - 更改彈出窗口位置
- 27. 更改DateTimePicker日曆運行時
- 28. datetimepicker更改不帶格式的顯示
- 29. 更改日期一天Datetimepicker插件
- 30. 更改DateTimePicker控件的語言
什麼UI語言是您使用? WPF? Silverlight的? ASP.net? ASP.net MVC?的WinForms? – ForbesLindesay
對不起,我忘了添加它。它的Winforms –
我的猜測是你會想從頭開始用Winforms,儘管如果DateTimePicker沒有被密封,你可能會通過使用可視化繼承來獲得輕微的開局。 – ForbesLindesay