有没有办法在MonthCalendar控件上获取光标下的日期?我想在右键单击时收集它以进入对话框。右键单击似乎不会触发它的点击事件。我尝试重载MouseDown事件,但这似乎也没有帮助。
答案 0 :(得分:3)
是的,MonthCalendar有自己的上下文菜单,因此禁用了右键单击事件。手术需要重新启用它。在项目中添加一个新类并粘贴下面显示的代码。编译。将新控件从工具箱顶部拖放到表单上。
using System;
using System.Drawing;
using System.Windows.Forms;
class MyCalendar : MonthCalendar {
public event MouseEventHandler RightClick;
protected override void WndProc(ref Message m) {
if (m.Msg == 0x205) { // Trap WM_RBUTTONUP
var handler = RightClick;
if (handler != null) {
var pos = new Point(m.LParam.ToInt32());
var me = new MouseEventArgs((MouseButtons)m.WParam.ToInt32(), 1, pos.x, pos.y, 0);
handler(this, me);
}
this.Capture = false;
return;
}
base.WndProc(ref m);
}
}
您现在可以订阅RightClick事件。类似的东西:
private void myCalendar1_RightClick(object sender, MouseEventArgs e) {
var hit = myCalendar1.HitTest(e.Location);
if (hit.HitArea == MonthCalendar.HitArea.Date) {
var dt = hit.Time;
MessageBox.Show(dt.ToString()); // Display your context menu here
}
}
答案 1 :(得分:0)
如果您想要右键单击捕获,请尝试此
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
}
}
可在此处找到更多信息
http://msdn.microsoft.com/en-us/library/system.windows.forms.mouseeventargs.aspx