如何在 C# 中同时迭代不同的控件类型(Checkbox 和 TextBox)

How to iterate different control types (Checkbox and TextBox) combined and at the same time in C#

我正在开发一个检查复选框是否被选中的程序。然后使用它的文本 属性 来处理更多的东西。 我添加了 numericUpDown 框,让用户可以输入自己的值。到目前为止,我正在迭代所有复选框并检查是否选中了其中一​​些。但现在我想迭代复选框,如果其中一个被选中,我想在选中的复选框下方的 numericUpDown 框中获取数字。

一次迭代复选框和数字上下框的最佳方法是什么? 我应该把它们分组吗?或者将它们放入额外的面板中?

到目前为止,这是我如何迭代复选框:

foreach (Control c in panel1.Controls)
    {
        if ((c is CheckBox) && ((CheckBox)c).Checked)
        {
        //Do some stuff
        }
    }

对不起我的英语不好,希望有人能帮忙。谢谢。

正如 Lars 所建议的那样,创建将复选框和 numericUpDown 组合在一起的用户控件是个好主意:

public partial class ToggleNumericControl : UserControl
{
    public ToggleNumericControl()
    {
        InitializeComponent();
    }

    public override string Text
    {
        get { return checkBox.Text;  }
        set { checkBox.Text = value; }
    }

    public bool Checked
    {
        get { return checkBox.Checked;  }
        set { checkBox.Checked = value; }
    }

    public decimal Value
    {
        get { return numericUpDown.Value; }
        set { numericUpDown.Value = Value; }
    }
}

当然,您可以在此处实现其他功能。例如。取消选中复选框时禁用 numericUpDown。

将此类控件放置到您的表单中,然后您可以select这样检查值:

var selectedValues = from tn in panel1.Controls.OfType<ToggleNumericControl>()
                     where tn.Checked
                     select tn.Value;