zoukankan      html  css  js  c++  java
  • DevExpress xtraTabbedMdiManager控件双击关闭MDI标签页

          DevExpress .net组件包中,有一个组件是xtraTabbedMdiManager,可以将MDI窗口显示为TabControl的样式,可以说非常实用。可惜的是,关闭标签页(即子MdiChild)不能通过双击来实现,这对于用惯了傲游等软件的朋友来说,有点不习惯。查看xtraTabbedMdiManager的事件,只有MouseDown,MouseUp等,并没有DoubleClick,好不爽。
          其实,转换一下思路,我们可以将连续的两次MouseDown事件模拟成一个双击事件,就可以解决上面的问题了,真是一点就破,技术上没有什么难度,且看代码吧:

    //通过MouseDown事件模拟双击关闭标签页
            private DateTime m_LastClick = System.DateTime.Now;
            
    private void xtraTabbedMdiManager1_MouseDown(object sender, MouseEventArgs e)
            {
                
    if (e.Button == MouseButtons.Left)
                {

                    DateTime dt 
    = DateTime.Now;
                    TimeSpan span 
    = dt.Subtract(m_LastClick);
                    
    if (span.TotalMilliseconds < 300)  //如果两次点击的时间间隔小于300毫秒,则认为是双击
                    {
                        
    if (this.MdiChildren.Length > 1)
                        {
                            
    if (this.ActiveMdiChild != m_MapForm)
                            {
                                
    this.ActiveMdiChild.Close();
                            }
                        }
                        m_LastClick 
    = dt.AddMinutes(-1);
                    }
                    
    else
                        m_LastClick 
    = dt;
                }
                
    else if (e.Button == MouseButtons.Right)
                {
                    
    //弹出右键菜单
                    if (this.ActiveMdiChild != m_MapForm)
                    {
                        POINTAPI pt 
    = new POINTAPI();
                        GetCursorPos(
    ref pt);
                        System.Drawing.Point p 
    = new System.Drawing.Point(pt.x, pt.y);
                        popMenuCloseTab.ShowPopup(
    this.barManager1, p);
                    }
                }
            }

            
    private void mnuCloseTab_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
            {
                
    if (this.ActiveMdiChild != m_MapForm)
                {
                    
    this.ActiveMdiChild.Close();
                }
            }

    在这里,我们认为如果两次点击时间间隔小于300毫秒,就认为是双击。注意,m_LastClick = dt.AddMinutes(-1),这一行代码的作用是,表示双击完成,避免点击三次认为是双击了两次。

    上面的代码还提供了点击右链弹出菜单功能。可以在右键菜单中加入你要的功能。
  • 相关阅读:
    一个bug案例分析
    《需求工程》阅读随笔-1.做什么和怎么做
    连贯接口(fluent interface)的Java实现及应用。
    代码覆盖率检测工具大全
    腾讯的一个移动端测试小工具GT
    用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题
    淘客API升级后的解决方案,怎么采集淘宝的商品数据
    方维团购系统,给供货商添加省市地址
    支付宝担保交易收款接口使用
    方维分享系统首页,插入新品,用来做优化
  • 原文地址:https://www.cnblogs.com/watsonyin/p/673989.html
Copyright © 2011-2022 走看看