• 只读的组合框


    介绍 和很多人一样,

      

    我也在寻找只读组合盒。大多数可用的代码示例都是复杂的,有一些错误,或者不是我们想要的那种只读的。所以我去寻找一个简单的解决方案,使用Windows消息保持下拉菜单关闭。正如您将在本文中看到的,代码非常简单。 使用的代码 从组合框继承类并覆盖可以修改类值的事件。在events下,您可以检查combobox是否为只读,以及块或忽略输入。 隐藏,收缩,复制Code

    // =============================================
    // Author: KC
    // Create date: 03/05/07
    // Description: ReadOonly ComboBox
    // =============================================
        class RoComboBox : System.Windows.Forms.ComboBox
        {
            private bool readOnly;
            public bool ReadOnly
            {
                get { return readOnly;}
                set { readOnly = value;}
            }
            protected override void  
                OnKeyDown(System.Windows.Forms.KeyEventArgs e)
            {
                if (readOnly)
                    e.Handled = true;
                 base.OnKeyDown(e);
            }
            protected override void 
                OnKeyPress(System.Windows.Forms.KeyPressEventArgs e)
            {
                if (readOnly)
                    e.Handled = true;
                base.OnKeyPress(e);
            }
            protected override void WndProc(ref System.Windows.Forms.Message m)
            {
                // WM_LBUTTONDOWN && WM_LBUTTONDBLCLK
                if ((m.Msg != 0x201 && m.Msg != 0x203) || !readOnly)
                    base.WndProc(ref m);
            }
        }

    那么,这段代码是干什么的呢? 它添加了一个私有字段和一个名为ReadOnly的属性。 隐藏,复制Code

    private bool readOnly;
           public bool ReadOnly
           {
               get { return readOnly;}
               set { readOnly = value;}
           }
    

    覆盖按键和按键;检查属性ReadOnly是否为真并设置为已处理。然后按键将不会修改组合框的值。 隐藏,复制Code

    protected override void
        OnKeyDown(System.Windows.Forms.KeyEventArgs e)
    {
        if (readOnly)
            e.Handled = true;
         base.OnKeyDown(e);
    }
    
    protected override void
        OnKeyPress(System.Windows.Forms.KeyPressEventArgs e)
    {
        if (readOnly)
            e.Handled = true;
        base.OnKeyPress(e);
    }
    

    您必须做的最后一件事是阻止鼠标,以防止下拉菜单打开。您可以通过重写combobox的WndProc并检查Windows消息的类型来实现这一点。当设置属性ReadOnly时,阻塞鼠标按钮。 隐藏,复制Code

    protected override void WndProc(ref System.Windows.Forms.Message m)
    {
        // WM_LBUTTONDOWN && WM_LBUTTONDBLCLK
        if ((m.Msg != 0x201 && m.Msg != 0x203) || !readOnly)
            base.WndProc(ref m);
    }
    

    的兴趣点 如果你想知道更多关于Windows消息的信息,或者为它们寻找一些常量值,请访问http://www.pinvoke.net/default.aspx/Constants.WM 历史 原始版本发布于:2007年5月7日 本文转载于:http://www.diyabc.com/frontweb/news349.html

  • 相关阅读:
    网络安全之常见攻击
    引入element-ui
    引入sass
    浏览器解析流程
    JDK8 HashMap--removeNode()移除节点方法
    JDK8 HashMap--treeify()树形化方法
    JDK1.8 HashMap--treeifyBin()方法
    二叉查找树ADT
    队列ADT

  • 原文地址:https://www.cnblogs.com/Dincat/p/13438309.html
Copyright © 2020-2023  润新知