验证在 C# 中检查了哪个动态创建的 Radiobutton

Verify which dynamically created Radiobutton is checked in C#

我正在开发一个在一个表单上包含多个面板(准确地说是八个)的应用程序。在每个 Panel 中有一个 TableLayoutPanel 和三个 Radiobuttons(以及其他一些不重要的组件)。单选按钮设置特定面板输入的优先级(优先级 123)。

我无意在八个面板中的每一个面板上放置三个单选按钮,因为我相信有更有效的方法可以做到这一点。下面是用于放置单选按钮的代码:

private void AddPriorityRadBtn(TableLayoutPanel lLayoutTable, int lTableLayoutColumn, int lTableLayoutRow)
    {
        int lPriority = -1;
        try
        {
            for (int i = lTableLayoutRow; i < (lTableLayoutRow+ 3); i++)
            {
                RadioButton lRadBtn = new RadioButton();
                lPriority = i - lLayTblStRow + 1;

                lRadBtn.Name = "radP_" + lPriority.ToString();
                lRadBtn.Text = "Priority Level " + lPriority.ToString();
                lRadBtn.Anchor = AnchorStyles.Left;
                lLayoutTable.Controls.Add(lRadBtn);


                if (lPriority < 3)
                {
                    lRadBtn.Checked = false;

                }
                else if(lPriority == 3)
                {
                    lRadBtn.Checked = true;
                }

                lTableLayout.Controls.Add(lRadBtn, lTableLayoutColumn, i);
            }
        }
        catch
        {
            Console.WriteLine(ex);
        }
    }

lTableLayoutColumnlTableLayoutRow用于设置单选按钮所在的列。 lPriority 用于计算按钮的优先级,其值总是从 13

我可以用上面的代码添加单选按钮。我怀疑这就是问题所在。

下一段代码是问题变得更加明显的地方:

private int GetSelectedRadioBtn()
    {
        RadioButton lRadBtnPriority = new RadioButton();
        try
        {
            for (int i = 1; i < 4; i++)
            {
                lRadBtnPriority.Name = "radP_" + i.ToString();
                if (lRadBtnPriority.Checked == true)
                {
                    return i;
                }
            }
            return -1;
        }
        catch (Exception ex)
        {
            return -1;
        }
    }

此函数总是 returns -1 来自 try 块。因此,我的应用程序看不到选择了哪个单选按钮。

这是什么原因?任何形式的帮助将不胜感激。

您的 GetSelectedRadioBtn() 创建了自己的单选按钮 它应该如何 link 编辑到以前的按钮?

lRadBtnPriority.Name = "radP_" + i.ToString();

这样做不会神奇地 link 您的新按钮到以前创建的按钮。

做您想做的事情的一种方法是为单选按钮订阅一个 checkedChanged 事件并更改一个名为 selectedRadio 的全局变量。

for (int i = lTableLayoutRow; i < (lTableLayoutRow+ 3); i++)
{
    RadioButton lRadBtn = new RadioButton();
    lPriority = i - lLayTblStRow + 1;

    lRadBtn.Name = "radP_" + lPriority.ToString();
    lRadBtn.Text = "Priority Level " + lPriority.ToString();
    lRadBtn.Anchor = AnchorStyles.Left;
    lRadBtn.Tag = i;
    lRadBtn.CheckedChanged +=(ss,ee)=>{

        selectedRadio = (int)((RadioButton)ss).Tag;
    };
    lLayoutTable.Controls.Add(lRadBtn);


    if (lPriority < 3)
    {
        lRadBtn.Checked = false;

    }
    else if(lPriority == 3)
    {
        lRadBtn.Checked = true;
    }

    lTableLayout.Controls.Add(lRadBtn, lTableLayoutColumn, i);
}

然后在 GetSelectedRadioBtn 中执行此操作

private int GetSelectedRadioBtn()
{
    return selectedRadio;
}

最简单的方法是存储对 AddPriorityRadBtn 中创建的单选按钮的引用。例如,您可以将它们保存在使用面板作为键的字典中,并将三个单选按钮保存在一个数组中。

然后,您只需查看字典即可恢复单选按钮并检查其状态。