【问题标题】:C# making a text box display what check boxes have been checkedC# 使文本框显示已选中的复选框
【发布时间】:2014-03-21 00:00:44
【问题描述】:

伙计们,下午,

我的问题涉及复选框和文本框。

为了给它上下文,我正在制作一个时间表系统,允许用户将时间表事件添加到他们自己的时间表中,并且为了选择他们的事件发生的时间,我有一系列复选框。

我总共有 25 个复选框,我想知道是否可以让一个文本框(或标签)显示被选中的复选框的名称?

例如,用户在星期一 9:15 和星期五 2:15 检查,我的文本框将显示星期一 9:15 和星期五 2:15。

谢谢

【问题讨论】:

  • 25 个复选框和 25 个文本框,还是 25 个复选框和 1 个文本框?
  • 复选框或单选按钮?
  • 我有 25 个复选框和 1 个文本框,想法是用户根据复选框名称(9:15,1:15 等)选择适当的时间目前我'当单击按钮时,我尝试过嵌套 if 语句,但我现在正在考虑只使用 on checkchanged,即使 ElectricRouge 建议。不过感谢您的所有帮助!
  • @Rivaarn 如果对您有帮助,请考虑将答案标记为解决方案。
  • @ElectricRouge 你的答案是错误的,因为如果选中了许多复选框,它就不起作用。你需要编写 25 个方法,每个复选框一个!

标签: c# winforms checkbox textbox


【解决方案1】:

checkBox1_CheckedChanged 事件中执行此操作

 private void checkBox1_CheckedChanged(object sender, EventArgs e)
 {
    if(checkBox1.Checked)  
       textBox1.Text = checkBox1.Text;
 }

【讨论】:

  • 所以,你写 25 checkboxXXX_checkedChanged() ?
  • 如果选中 2 个复选框会怎样? For example the user checks Monday at 9:15 and Friday at 2:15, my text box would display Monday 9:15 and Friday 2:15.
  • @Xaruth 所以你希望我为他做所有的编码?我只向他展示了在选中复选框时如何设置文本框值。他如何在他的解决方案中实现它取决于他。
  • 如果多选,那么如何更改此代码
【解决方案2】:

我会做这样的事情:

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
   if(checkBox1.Checked)  
   listbox1.items.add(checkBox1.Text);
}

通过这种方式,日期和时间将被添加到列表中。 我个人认为这种方式效果更好,因为您可以看到您列出的所有日期。

【讨论】:

    【解决方案3】:

    您可以使用事件 CheckedChanged。由于您使用许多复选框,因此您只能编写一种方法并将其用于所有复选框。

    我建议您使用值列表来存储要在文本框中显示的内容,然后对其进行处理(在我的示例中,我对数据进行排序并将它们连接起来)。

    public partial class Form1 : Form
    {
        private List<String> listData;
    
        public Form1()
        {
            this.listData = new List<String>();
            InitializeComponent();
        }
    
        private void checkBoxs_CheckedChanged(object sender, EventArgs e)
        {
            CheckBox theCheckBoxChanged = sender as CheckBox;
    
            // verify the event is from a checkbox
            if (theCheckBoxChanged != null)
            {
                if (theCheckBoxChanged.Checked)
                {
                    // add data
                    this.listData.Add(theCheckBoxChanged.Text);
                }
                else
                {
                    // remove data
                    this.listData.Remove(theCheckBoxChanged.Text);
                }
    
                this.UpdateTextBox();
            }
        }
    
        private void UpdateTextBox()
        {
            // be carefull, you can't concatenate if there is no data.
            if (this.listData.Count > 0)
            {
                // sort and concatenate
                this.textBox1.Text = this.listData
                                         .OrderBy(s => s)
                                         .Aggregate((s1, s2) => s1 + " and " + s2);
            }
            else
            {
                this.textBox1.Text = String.Empty;
            }
        }
    }
    

    不要忘记将所有复选框的事件CheckedChanged 分配给checkBoxs_CheckedChanged

    【讨论】:

      【解决方案4】:

      很抱歉,我无法评论您的帖子,@Rouge。我要补充

      if(checkBox1.Checked) { // your statement }
      

      因为在您的情况下,我认为 textBox 会更改其文本,即使它的状态从选中更改为未选中。

      【讨论】:

      • 谢谢。我忘了检查条件。
      • 从来没有这样想过,当你这样说的时候,它看起来很明显哈哈。谢谢大家
      猜你喜欢
      • 1970-01-01
      • 2019-12-31
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-02
      • 1970-01-01
      相关资源
      最近更新 更多