C# MonthCalendar 控件获取光标下的日期

Posted

技术标签:

【中文标题】C# MonthCalendar 控件获取光标下的日期【英文标题】:C# MonthCalendar control Get date under cursor 【发布时间】:2011-11-03 04:12:08 【问题描述】:

有没有办法在 MonthCalendar 控件上获取光标下的日期?我想在右键单击时收集它以传递到对话框中。右键单击似乎不会触发它的单击事件。我尝试重载 MouseDown 事件,但这似乎也无济于事。

【问题讨论】:

【参考方案1】:

是的,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
        
    

【讨论】:

效果很好。谢谢你。 :) 自己应该想到的。【参考方案2】:

如果你想捕获右键,请试试这个

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

【讨论】:

以上是关于C# MonthCalendar 控件获取光标下的日期的主要内容,如果未能解决你的问题,请参考以下文章

在C#的月历控件中,怎样得到被选中的日期?

如何应用VB.NET MonthCalendar控件

带有嵌入式 MonthCalendar 问题的 UserControl

C#winform中怎么获取monthCalendar控件中的当前星期?

在 C# 中修改控件

c# 怎样实现点击TextBox弹出日历控件,并在点击日历某时间时赋值给TextBox