【问题标题】:Omitting the selection of checkboxes省略复选框的选择
【发布时间】:2016-11-22 22:59:21
【问题描述】:

所以我有一个带有随机按钮的鼓机,可以随机填充每个复选框。我不想同时演奏 2 个鼓。共有 16 个节拍,共 5 个鼓。所以我正在考虑使用一个 for 循环来检查列表中的当前值,然后将复选框布尔值设置为 false 值正负 16。

例如:如果选中复选框 1,则复选框 17、33、49 和 65 应为空。同样,如果选中复选框 56,则应取消选中 8、24、40 和 72。每个复选框都应该如此。我不知道该怎么做。

This is my form it will help display my intent

这里是随机填充复选框的代码:

private void randombuttonClick(object sender, EventArgs e)
        {
            List<CheckBox> Checkboxlist = new List<CheckBox>();
            foreach (CheckBox control in this.Controls.OfType<CheckBox>())
            {
                Checkboxlist.Add(control);
                control.Checked = false;
            }

            for (int i = 0; i <= 50; i++)
            {
                var r = random.Next(0, Checkboxlist.Count);
                var checkbox = Checkboxlist[r];
                Checkboxlist[r].Checked = true;
            }
        }

感谢收看!

【问题讨论】:

  • 我想你必须更具体一点,有点不清楚为什么会这样为什么会这样 ...你正在研究这个项目并将其可视化,无论是在纸上还是通过思想,我们都没有。
  • 选中复选框 1 时,您想取消选中 17、33、49 和 56。它们之间的 18、19、20 等和 34、35 等呢?
  • 听起来您可能应该使用单选按钮...
  • 应该取消选中每个相应列中的其他选择。两者之间的每个值都很好。

标签: c# for-loop checkbox boolean


【解决方案1】:

首先 - 您可能想按某些东西对复选框列表进行排序。如果您的 TabIndex 属性设置正确,您可以这样做:

foreach (CheckBox control in this.Controls.OfType<CheckBox>().OrderBy(x => x.TabIndex))
{
    //...
}

其次,最简单的解决方案可能是遍历列,随机挑选一个鼓来演奏。

List<CheckBox> checkboxList = this.Controls.OfType<CheckBox>()
    .OrderBy(x => x.TabIndex)
    .ToList(); //it's simpler than a foreach loop
for (int i = 0; i < 16; i++)
{
    var instrumentIndex = random.Next(0, 4); //make it (0, 5) if you want to allow an entirely empty column
    for (int j = 0; j < 4; j++)
    {
        checkboxList[j*16 + i] = (j == instrumentIndex);
    }
}

代码使用i 变量遍历列以存储当前列号。对于每一列,它会从四列中选择一个随机行(如评论所说,如果您希望“当前节拍中没有乐器”成为一个选项,只需将随机范围扩展到包括 4,这将不匹配任何行)。

然后,对于该列中的每个复选框(从 ith 复选框开始,位于第一行和 ith 列,每次移动 16 个复选框,向下移动一行),当行号与随机选择的行号匹配时,它分配true,否则分配false

【讨论】:

  • 非常感谢!巨大的帮助。也感谢您的深入解释!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多