Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Windows窗体中为每个可能的枚举值创建复选框?_C#_.net_Winforms_Reflection_Dialog - Fatal编程技术网

C# 如何在Windows窗体中为每个可能的枚举值创建复选框?

C# 如何在Windows窗体中为每个可能的枚举值创建复选框?,c#,.net,winforms,reflection,dialog,C#,.net,Winforms,Reflection,Dialog,假设我们有一个枚举标识符{Name,Id,Number},我们希望为用户提供一个类似消息的对话框,其中只包含每个可能的标识符值的复选框和Ok按钮。对话框确认时,如果未选中任何复选框,则获取Listempty。如何使用winforms完成如此简单的操作?您可以通过以下方法在枚举中获得一个值数组: var valuesArray = Enum.GetValues(typeof (Identifier)); 要显示复选框,请执行以下操作: foreach (var val in valuesArra

假设我们有一个枚举标识符{Name,Id,Number},我们希望为用户提供一个类似消息的对话框,其中只包含每个可能的标识符值的复选框和Ok按钮。对话框确认时,如果未选中任何复选框,则获取Listempty。如何使用winforms完成如此简单的操作?

您可以通过以下方法在枚举中获得一个值数组:

var valuesArray = Enum.GetValues(typeof (Identifier));
要显示复选框,请执行以下操作:

foreach (var val in valuesArray)
{
    //create checkbox
    var cb = new CheckBox();
    cb.Name = string.Format("cb_{0}", val);
    cb.Text = val; //set your properties

    //add to your form controls
    this.Controls.Add(cb);
}
要获取列表,只需获取表单上的所有复选框:

var checkedIdentifiers = new List<Identifier>();
foreach (var val in valuesArray)
{
    //find checkbox
    var cb = this.Controls[string.Format("cb_{0}", val)];
    if (cb != null && cb.Checked)
        checkedIdentifiers.Add((Identifier)Enum.Parse(typeof(Identifier), val));
}

您可以对上述内容进行额外的错误检查,但这是其要点。

您可以通过以下方法获得枚举中的值数组:

var valuesArray = Enum.GetValues(typeof (Identifier));
要显示复选框,请执行以下操作:

foreach (var val in valuesArray)
{
    //create checkbox
    var cb = new CheckBox();
    cb.Name = string.Format("cb_{0}", val);
    cb.Text = val; //set your properties

    //add to your form controls
    this.Controls.Add(cb);
}
要获取列表,只需获取表单上的所有复选框:

var checkedIdentifiers = new List<Identifier>();
foreach (var val in valuesArray)
{
    //find checkbox
    var cb = this.Controls[string.Format("cb_{0}", val)];
    if (cb != null && cb.Checked)
        checkedIdentifiers.Add((Identifier)Enum.Parse(typeof(Identifier), val));
}

您可以对上述内容进行额外的错误检查,但这就是它的要点。

到目前为止您尝试了什么?你肯定不需要思考,所以也许可以去掉这个标签?@LinusCaldwell也许我在放屁,但如果没有思考,你怎么做?除了手动创建每个复选框之外,我的意思是。@Blorgbeard,嗯,也许我错了,但如果你像RCLENT的回答那样做,我不会称之为反射,是吗?@LinusCaldwell不,我是brainfart。你到目前为止做了什么?你肯定不需要思考,所以也许可以去掉这个标签?@LinusCaldwell也许我在放屁,但如果没有思考,你怎么做?除了手动创建每个复选框之外,我的意思是。@Blorgbeard,嗯,也许我错了,但如果你像RCLENT的回答那样做,我不会称之为反射,是吗?@LinusCaldwell不,我是brainfart。