MonthCalendar(日历控件)扩展DoubleClick事件 - tom385

tom385 2021-08-09 原文


MonthCalendar(日历控件)扩展DoubleClick事件


C#初学并不是很难,学过C,学过JAVA就能很容易入门,但仅仅是入门而已!真正的较量是在开发过程中碰到的一些实际的问题,昨天在开发一个和日历控件(MonthCalendar)有关联的项目,本想使用DoubleClick事件使得控件关闭然后传值,就这么简单!可是发现微软既然没有提供MonthCalendar中DoubleClick事件,原因不知为何,但问题必须解决,没办法,只能亲手扩展了!
下面就与大家一起分享解决方法!其中参考国外网的一些代码!
首先需要新建一个自定义控件继承MonthCalendar

C#初学并不是很难,学过C,学过JAVA就能很容易入门,但仅仅是入门而已!真正的较量是在开发过程中碰到的一些实际的问题,昨天在开发一个和日历控件(MonthCalendar)有关联的项目,本想使用DoubleClick事件使得控件关闭然后传值,就这么简单!可是发现微软既然没有提供MonthCalendar中DoubleClick事件,原因不知为何,但问题必须解决,没办法,只能亲手扩展了!
下面就与大家一起分享解决方法!其中参考国外网的一些代码!
首先需要新建一个自定义控件继承MonthCalendar
其中重写几个重要的方法如OnMouseDown和OnDoubleClick方法即可

代码区域
    public partial class Cldar : MonthCalendar
    
{
        
private Point m_LastClickPosition;
        
private long m_LastClickTime;
        
private Boolean m_LastClickRaisedDoubleClick;

        
public Cldar()
        
{
            InitializeComponent();
        }


        
protected override void OnPaint(PaintEventArgs pe)
        
{
            
// TODO: Add custom paint code here

            
// Calling the base class OnPaint
            base.OnPaint(pe);
        }


        
/**//// <summary>
        
/// ModeChanged Event.
        
/// </summary>

        [Browsable(true)]
        [Category(
Basic_Event), Description(觸發MonthCalendar雙擊時的事件.)]
        
public event EventHandler DoubleClick;

        
protected override void OnDoubleClick(EventArgs e)
        
{
            DoubleClick(
this, e);
            
base.OnDoubleClick(e);
        }


        
bool IsInDoubleClickArea(Point Point1, Point Point2)
        
{
            
return Math.Abs(Point1.X  Point2.X) <= SystemInformation.DoubleClickSize.Width &&
            Math.Abs(Point1.Y 
 Point2.Y) <= SystemInformation.DoubleClickSize.Height;
        }


        
protected override void OnMouseDown(MouseEventArgs e)
        
{
            
if (e.Button == MouseButtons.Left)
            
{
                
if (!m_LastClickRaisedDoubleClick && System.DateTime.Now.Ticks  m_LastClickTime <= SystemInformation.DoubleClickTime * 10000 && IsInDoubleClickArea(m_LastClickPosition, Cursor.Position))
                
{
                    OnDoubleClick(EventArgs.Empty);
                    m_LastClickRaisedDoubleClick 
= true;
                }

                
else
                
{
                    m_LastClickRaisedDoubleClick 
= false;
                }

                m_LastClickPosition 
= Cursor.Position;
                m_LastClickTime 
= System.DateTime.Now.Ticks;

            }

            
base.OnMouseDown(e);
        }

    }
发表于
2007-08-23 08:47 
tom385 
阅读(1409
评论(2
编辑 
收藏 
举报

 

版权声明:本文为tom385原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/tom385/archive/2007/08/23/866227.html

MonthCalendar(日历控件)扩展DoubleClick事件 - tom385的更多相关文章

  1. Intel QuickAssist Technology and OpenSSL – Benchmarks and Setup Tips

    Intel QuickAssist Technology and OpenSSL – Benchmarks a […]...

  2. 《C# 爬虫 破境之道》:第二境 爬虫应用 — 第七节:并发控制与策略

    我们在第五节中提到一个问题,任务队列增长速度太快,与之对应的采集、分析、处理速度远远跟不上,造成内存快速增长, […]...

  3. ZeroMQ 教程 001 : 基本概览

    本文主要译自 zguide – chapter one. 但并不是照本翻译. 介绍性的话我这里就不 […]...

  4. 2017年软件设计师试题 – 四海骄阳

    2017年软件设计师试题 试题1 CPU执行算术运算或者逻辑运算时,常将源操作数和结果暂存在()中。 A.程序 […]...

  5. 设计模式之观察者模式 – Mr.Tan&

    设计模式之观察者模式  什么是观察者模式 它定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所 […]...

  6. matplotlib画图总结–常用功能 – 啊哈彭

    matplotlib画图总结–常用功能 matplotlib画图总结–常用功能。图例、 […]...

  7. Oracle数据库的下载和安装 – 复制乔布斯

    Oracle数据库的下载和安装 那天分享一下Oracle的下载和安装的过程,有需要的朋友可以借鉴参考一下。如有 […]...

  8. 查看服务器 硬件参数命令(持续更新) – 阿俊de坑

    查看CPU详细参数:cat /proc/cpuinfo   ...

随机推荐

  1. 不想写博客?那试试日记吧!

    一、背景 昨天博客园的园龄达到了两年,原来我也是一个老园友了,大一下学期开始写博客整理一些ACM题解,现在使用 […]...

  2. 分布式领域攻与伐(0/9)(切开分布式)

    我最初接触到分布式是菜鸟网络的一个高级技术管理人员的…. 抱歉,最烦这类废话,直接跳过。(who […]...

  3. Linux 查看文件被那个进程写数据 – Jia-Xin

    Linux 查看文件被那个进程写数据 目录 背景 步骤 获取写文件的进程号 文件被那个进程使用,写数据不是用l […]...

  4. QML-密码管理器

    Intro 年初刚学Qml时写的密码管理器。用到Socket通信、AES加密等。UI采用Material De […]...

  5. MongoDB学习(管理数据库和集合)

    管理数据库 显示数据库列表   show dbs        切换到其他数据库 use <databa […]...

  6. 快速排序

      快速排序为什么被称之为快速排序呢?从字面意思上来看肯定是因为它比较快啦。当然实际上也是这样,相比于其他的排 […]...

  7. Linux-ELK日志收集

    1.ELK简介 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Ki […]...

  8. 计算机网络详解

    局域网 LAN 带宽固定 广域网 WAN 花钱租带宽   交换机:接入层交换机,汇聚层交换机,核心层交换机   […]...

展开目录

目录导航