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

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

【问题讨论】:

    标签: c# .net monthcalendar


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多