如何捕獲MonthCalendar控件的doubleclick事件?我試過使用MouseDown的MouseEventArgs.Clicks屬性,但它始終是1,即使我雙擊。在Windows窗體應用程序中爲MonthCalendar控件捕獲doubleclick
4
A
回答
4
請注意MonthCalendar既沒有在屬性窗口中顯示DoubleClick也沒有顯示MouseDoubleClick事件。確實遇到麻煩,原生Windows控件會阻止生成這些事件。您可以通過觀看MouseDown事件並測量點擊之間的時間來合成自己的視頻。
向您的項目中添加一個新類並粘貼下面顯示的代碼。編譯。從工具箱的頂部放下新控件。編寫DoubleClickEx事件的事件處理程序。
using System;
using System.Windows.Forms;
class MyCalendar : MonthCalendar {
public event EventHandler DoubleClickEx;
public MyCalender() {
lastClickTick = Environment.TickCount - SystemInformation.DoubleClickTime;
}
protected override void OnMouseDown(MouseEventArgs e) {
int tick = Environment.TickCount;
if (tick - lastClickTick <= SystemInformation.DoubleClickTime) {
EventHandler handler = DoubleClickEx;
if (handler != null) handler(this, EventArgs.Empty);
}
else {
base.OnMouseDown(e);
lastClickTick = tick;
}
}
private int lastClickTick;
}
0
最好添加下面的代碼,否則如果你快速點擊兩個日期你將有事件。
protected override void OnDateChanged(DateRangeEventArgs drevent) {
lastClickTick = Environment.TickCount - 2 * SystemInformation.DoubleClickTime;
base.OnDateChanged(drevent);
}
2
您需要自己跟蹤點擊事件。您需要使用DateSelected事件來標記點擊日期的時間,並使用DateChanged事件來「重置」時間跨度,因此您不會將點擊不同的日期作爲雙擊來計數。
注:如果您使用鼠標按下事件,你會得到錯誤行爲
鼠標按下事件單擊月/年,無論是點擊所發生的,例如等日曆的頭會註冊與點擊真實日期相同。因此使用DateSelected而不是鼠標按下事件。
private DateTime last_mouse_down = DateTime.Now;
private void monthCalendar_main_DateSelected(object sender, DateRangeEventArgs e)
{
if ((DateTime.Now - last_mouse_down).TotalMilliseconds <= SystemInformation.DoubleClickTime)
{
// respond to double click
}
last_mouse_down = DateTime.Now;
}
private void monthCalendar_main_DateChanged(object sender, DateRangeEventArgs e)
{
last_mouse_down = DateTime.Now.Subtract(new TimeSpan(1, 0, 0));
}
相關問題
- 1. 在Windows窗體應用程序中捕獲組合鍵事件
- 2. 的DoubleClick在我的窗體捕獲
- 3. 在Windows窗體應用程序中捕獲應用程序異常
- 4. 在Windows窗體應用程序中使用C#的WebBrowser控件#
- 5. 在Windows窗體應用程序中承載WPF控件
- 6. 如何在Windows窗體應用程序中迭代控件?
- 7. 在Windows窗體中調整控件位置應用程序
- 8. 如何在Windows窗體應用程序中顯示MFC控件?
- 9. 在Windows窗體應用程序中使用Windows應用商店控件
- 10. Windows窗體應用程序中的用戶控件
- 11. WPF應用程序中的Windows窗體用戶控件
- 12. WPF用戶控件和Windows窗體用戶控件在Windows窗體應用程序
- 13. 從Windows窗體應用程序C控制檯應用程序#
- 14. 與控制檯應用程序Windows窗體應用程序
- 15. Windows窗體應用程序
- 16. 產生窗體(Windows窗體)的控制檯應用程序?
- 17. opencv C++:如何在windows窗體應用程序中顯示攝像頭捕獲?
- 18. 隱藏Windows窗體應用程序中的控制檯窗口
- 19. 獲取應用程序文件路徑在Windows窗體應用程序
- 20. 在Windows窗體應用程序中創建控制檯應用程序
- 21. 如何將控制檯應用程序更改爲Windows窗體應用程序?
- 22. 在Windows中暫時捕獲控制檯應用程序的stdout
- 23. 在Windows窗體應用程序中控制多個視圖
- 24. 如何在控制檯應用程序中的Windows窗體應用程序中指定最後一個窗體?
- 25. 在windows窗體中捕獲openCV視頻
- 26. 添加應用程序配置爲Windows窗體應用程序
- 27. 在DataGrid中捕獲DoubleClick
- 28. 在C++中打開新窗體Windows窗體應用程序
- 29. Windows窗體:捕獲MouseWheel
- 30. 捕獲在Windows應用程序
您能解釋一下日曆控件引用的內容以及您定位的是哪個版本的.NET Framework? –
本地MonthCalendar沒有雙擊事件。你想達到什麼目的? – UnhandledExcepSean
@Witchunter,我很抱歉,我的意思是System.Windows.Forms.MonthCalendar。 –