【问题标题】:checkbox/toggle button check/uncheck itself复选框/切换按钮检查/取消选中本身
【发布时间】:2012-05-16 11:44:16
【问题描述】:

我有许多复选框,我想将它们作为切换按钮来处理。每个都完全独立于另一个,可以选中或不选中。当用户单击复选框/按钮时,它保持选中状态,如果用户再次单击,则复选框/按钮返回“未选中”状态。复选框/按钮可以自行勾选/取消勾选吗?

我已经尝试了很长时间,也在互联网上搜索并找不到解决方案。

【问题讨论】:

  • Can the checkbox/button check/uncheck itself?。解释一下。
  • 需要一些示例代码...我不明白您尝试了什么?
  • 你有没有尝试实现checkbox的checked change事件?在此事件中,无论是选中还是未选中,您都会得到它。
  • 什么是“切换”按钮?当您单击它们时,复选框会选中和取消选中。
  • 这个问题的描述性不够,并且做出了许多假设,我们知道您正在处理的上下文请解释更多

标签: c# winforms checkbox togglebutton


【解决方案1】:

检查复选框的状态,每次单击按钮时,更改它。

private void toggButton_CheckedChanged(object sender, EventArgs e) 
{ 
    // everytime you click the button checkbox states will change.
    if(checkBox.Checked)
    {
        checkBox.Checked = false;
    }
    else
    {
       checkBox.Checked = true;
    }
}

【讨论】:

    【解决方案2】:

    问题是复选框/按钮一如既往地“显示” 按下,即它在检查时的“蓝色”颜色没有改变 给人的印象是它不是未经检查的。 – user1304490

    可能设置 CheckBox.ThreeState 属性 false 有帮助。

    如果将 ThreeState 属性设置为 false,则 CheckState 属性值只能在代码中设置为 System.Windows.Forms.CheckState 的 Indeterminate 值,而不能通过用户交互。

    【讨论】:

      【解决方案3】:

      一个很短的命令:

      checkBox.Checked = !checkBox.Checked;
      

      【讨论】:

        【解决方案4】:

        您可以为所有复选框分配一个公共事件。将此代码写入您的 .cs 文件并选择所有 Checkboxes 并将此事件分配给 checkedChange 事件。

        private void chkboxes_CheckedChanged(object sender, EventArgs e)
        {
            CheckBox chk = (CheckBox)sender;
            if(!chk.Checked)
                chk.Checked = true;
            else
                chk.Checked = false;
        }
        

        【讨论】:

          【解决方案5】:

          参考:CheckBox.CheckState 属性。
          它是读写属性,因此您可以在 GUI 中或通过代码进行设置。

          选中 CheckBox 显示一个复选标记。控件出现凹陷。
          未选中 CheckBox 为空。控件显示为凸起。
          不确定 CheckBox 显示复选标记并带有阴影。控件显示为扁平。

          在选中的更改事件上写下这个并检查它是否切换.. 它将像一个开关一样工作..

              label1.Text = "ThreeState: " + checkBox1.ThreeState.ToString() + "\n" + "Checked: " + 
          checkBox1.Checked.ToString() + "\n" + "CheckState: " + checkBox1.CheckState.ToString();
          

          为你的问题的答案检查CheckBox.AutoCheck Property

          【讨论】:

            【解决方案6】:

            当您想要更改一个表单上太多复选框的复选框状态时,您需要快速可靠且不复杂的代码。

            最好的方法是使用:

            CheckBox.CheckState

            例如,您可以使用以下代码将复选框状态更改为(未选中):

            checkbox1.CheckState = CheckState.Unchecked;
            checkbox2.CheckState = CheckState.Unchecked;
            checkbox3.CheckState = CheckState.Unchecked;
            

            如需进一步阅读,请参阅来自 MSDN 的 this

            【讨论】:

              【解决方案7】:

              这个问题很不清楚,但如果有人还在为复选框而苦苦挣扎:

              在其中两个之间切换(不能同时勾选两个复选框,至少需要勾选一个):

               private void chkBoxON_CheckedChanged(object sender, EventArgs e)
                  {
                      if (chkBoxON.Checked)
                      {
                          chkBoxOFF.Checked = false;
                          // here some code to do after this checkbox is ticked
                      }
                      else
                      {
                          chkBoxOFF.Checked = true;
                      }
                      
                  }
              
                  private void chkBoxOFF_CheckedChanged(object sender, EventArgs e)
                  {
                      if (chkBoxOFF.Checked)
                      {
                          chkBoxON.Checked = false;
                          // here some code to do after this checkbox is ticked
                      }
                      else
                      {
                          chkBoxON.Checked = true;
                      }
                      
                  }
              

              如果您只需要选中一个或两个都未选中,则:

               if (chkBoxON.Checked)
                      {
                          chkBoxOFF.Checked = false;
                      }
                  }
              
                  private void chkBoxOFF_CheckedChanged(object sender, EventArgs e)
                  {
                      if (chkBoxOFF.Checked)
                      {
                          chkBoxON.Checked = false; 
                      }
                     
              

              如果您需要使用按钮更改它的状态,那么:

              private void button1_Click(object sender, EventArgs e)
                  {
                      chkBoxON.Checked = false;
                      //chkBoxON.Checked = true; //if need to be checked
                  }
              

              如果您需要禁用单击复选框的可能性,则:

              chkBoxOFF.Enabled = false;
              

              【讨论】:

                【解决方案8】:

                您只需要使用 NOT 运算符来创建最简单的切换。

                checkBox.Checked = !checkBox.Checked;
                

                【讨论】:

                • 发布与another answer that already exists 完全相同的答案是没有用的,也不符合社区准则。
                • 谢谢,我以后会记住这一点的。我最初没有注意到相同的确切答案,然后很惊讶它没有投票,因为我认为这是最简单的答案。我还认为它并不总是一个众所周知的约定,并且从另一篇文章中的 cmets 中并不明显,我还想澄清一下,如果 NOT 运算符不明显或不明显,则使用它。
                猜你喜欢
                • 2019-02-14
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-09-05
                • 2014-09-24
                • 2017-11-01
                相关资源
                最近更新 更多