如何捕获 System.Windows.Forms.MonthCalendar 控件的双击事件?我尝试使用 MouseDown 的 MouseEventArgs.Clicks 属性,但它始终为 1,即使我双击了。
如何捕获 System.Windows.Forms.MonthCalendar 控件的双击事件?我尝试使用 MouseDown 的 MouseEventArgs.Clicks 属性,但它始终为 1,即使我双击了。
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;
}
base.OnDoubleClick(EventArgs.Empty)
和 base.OnMouseDoubleClick(e);
并使用标准事件,而不是定义和调用自己的事件。 - ChaquotayHitTest()
的结果,选择正确的HitArea
进行双击检测,或者当Time
为default(DateTime)
时忽略该事件。 - Chaquotayprivate 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));
}
protected override void OnDateChanged(DateRangeEventArgs drevent) {
lastClickTick = Environment.TickCount - 2 * SystemInformation.DoubleClickTime;
base.OnDateChanged(drevent);
}