我正在一个表格上开发一个具有多个面板(准确地说是八个)的应用程序。在每个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。
这是什么原因?任何形式的帮助将不胜感激。
答案 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作为键的字典中,以及数组中的三个单选按钮。
然后,您只需查看字典即可恢复单选按钮并检查其状态。