【问题标题】:How to make a CheckBox unselectable?如何使 CheckBox 不可选择?
【发布时间】:2011-08-23 02:20:38
【问题描述】:

我想知道您如何在 c# 中使 CheckBox 不可选择?我以为它会是 SetSelectable (false) 之类的东西,但我似乎看不到该方法。

我找到了CanSelect,但这似乎是一个只读属性。

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    您可以将AutoCheck 属性设置为false

    【讨论】:

    • @bunggo - 同意,为什么最简单的解决方案有时最难找到...
    • 用户应该能够无需详细说明她是否能够选中该框。
    • 此解决的工具提示在未启用复选框时不可见,使用 AutoCheck = false 代替 Enabled = false
    • 这是一个很好的解决方案,直到现在才发现这个隐藏的属性。当涉及到复选框时,这确实是一个缺失的部分。 Enable = False 如果经常不是一个好的解决方案,它确实使复选框难以阅读。禁用对于只读模式是没有用的,因为它不允许物理读取文本!
    【解决方案2】:

    您可以将Enabled 属性设置为false

    checkBox1.Enabled = false;
    

    【讨论】:

    • 这也会禁用标签,使其变灰。 This更好
    【解决方案3】:

    您可以使用以下代码创建一个

    public class ReadOnlyCheckBox : System.Windows.Forms.CheckBox
    {
            private bool readOnly;
    
            protected override void OnClick(EventArgs e)
            {
                    // pass the event up only if its not readlonly
                    if (!ReadOnly) base.OnClick(e);
            }
    
            public bool ReadOnly
            {
                    get { return readOnly; }
                    set { readOnly = value; }
            }
    }
    

    或者您也可以处理选中的更改事件并始终将其设置回您想要的值

    【讨论】:

    • 如果启用就足够了,似乎有点复杂。
    • 我认为禁用看起来不太好,因为它也会禁用文本
    • @HarisHasan 在这种情况下使用 Jacob Seleznev 的答案 - 使用 AutoCheck 禁用选中/取消选中而不禁用文本
    • 对,AutoCheck 做同样的事情而不创建新类
    【解决方案4】:

    为了做出更多的只读行为:

    • 当光标在CheckBox 上时禁用突出显示
    • 禁用对鼠标单击的反应(逻辑上或可见)
    • 启用工具提示

    我们可以继承CheckBox类(类似于Haris Hasan's answer但有一些改进):

    public class ReadOnlyCheckBox : CheckBox
    {
        [System.ComponentModel.Category("Behavior")]
        [System.ComponentModel.DefaultValue(false)]
        public bool ReadOnly { get; set; } = false;
    
        protected override void OnMouseEnter(EventArgs e)
        {
            // Disable highlight when the cursor is over the CheckBox
            if (!ReadOnly) base.OnMouseEnter(e);
        }
    
        protected override void OnMouseDown(MouseEventArgs e)
        {
            // Disable reacting (logically or visibly) to a mouse click
            if (!ReadOnly) base.OnMouseDown(e);
        }
    
        protected override void OnKeyDown(KeyEventArgs e)
        {
            // Suppress space key to disable checking/unchecking 
            if (!ReadOnly || e.KeyData != Keys.Space) base.OnKeyDown(e);
        }
    }
    

    【讨论】:

      【解决方案5】:

      您可以将Enabled 属性设置为false

      【讨论】:

        【解决方案6】:

        UWP 中不存在 AutoCheck,但我认为您可以使用 IsTapEnabled = false。

        【讨论】:

          【解决方案7】:

          针对一些关于灰色标签的cmets:将CheckBoxText设置为空字符串,Enabletofalse并使用Label作为文本。

          缺点:没有现成的助记符支持。

          【讨论】:

            【解决方案8】:

            利用一个简单的Label,使用这样的字形作为其Text✔ checkBox1

            【讨论】:

              【解决方案9】:

              这段代码对我有用:

              public class CtrlCheckBoxReadOnly : System.Windows.Forms.CheckBox
              {
                  [Category("Appearance")]
                  [Browsable(true), EditorBrowsable(EditorBrowsableState.Always)]
                  public bool ReadOnly { get; set; }
              
                  protected override void OnClick(EventArgs e)
                  {
                      if (!ReadOnly) base.OnClick(e);
                  }
              }
              

              【讨论】:

                【解决方案10】:

                用于禁用 CheckedListBox 中的所有复选框

                for (int i = 0; i < checkedListBoxChecks.Items.Count; i++)
                {
                   checkedListBoxChecks.SetItemChecked(i, true);
                   //checkedListBoxChecks.Enabled = false;
                   this.checkedListBoxChecks.SetItemCheckState(i, CheckState.Indeterminate);                  
                }
                
                
                private void checkedListBoxChecks_ItemCheck(object sender, ItemCheckEventArgs e)
                {
                    if (e.CurrentValue == CheckState.Indeterminate)
                    {
                        e.NewValue = e.CurrentValue;
                    }
                }
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-05-12
                  • 2020-12-20
                  • 1970-01-01
                  相关资源
                  最近更新 更多