如何捕获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。 –