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

时间:2015-04-28 07:53:22

标签: c# dynamic radio-button panel tablelayout

我正在一个表格上开发一个具有多个面板(准确地说是八个)的应用程序。在每个Panel中,有一个带有三个Radiobutton的TableLayoutPanel(在少数其他不重要的组件中)。 Radiobuttons设置特定Panel输入的优先级(优先级 1 2 3 )。

我无意在八个面板上分别放置三个Radiobutton,因为我相信有更有效的方法可以做到这一点。下面是用于放置Radiobuttons的代码:

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);
        }
    }

lTableLayoutColumn lTableLayoutRow 用于设置放置Radiobuttons的列。 lPriority 用于计算按钮的优先级,并始终具有从 1 3 的值。

我可以使用上面的代码添加Radiobuttons。我怀疑这就是问题所在。

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

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;
        }
    }

此函数始终从 try 块返回 -1 。因此,我的应用程序无法看到选择了哪一个Radiobuttons。

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

2 个答案:

答案 0 :(得分:0)

你的GetSelectedRadioBtn()会创建自己的单选按钮,它应该如何链接到之前的按钮?

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

这样做并不会将您的新按钮与当前创建的按钮联系起来。

执行您想要做的事情的一种方法是将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;
}

答案 1 :(得分:0)

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

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