验证在 C# 中检查了哪个动态创建的 Radiobutton
Verify which dynamically created Radiobutton is checked in C#
我正在开发一个在一个表单上包含多个面板(准确地说是八个)的应用程序。在每个 Panel 中有一个 TableLayoutPanel 和三个 Radiobuttons(以及其他一些不重要的组件)。单选按钮设置特定面板输入的优先级(优先级 1、2 和 3)。
我无意在八个面板中的每一个面板上放置三个单选按钮,因为我相信有更有效的方法可以做到这一点。下面是用于放置单选按钮的代码:
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用于设置单选按钮所在的列。 lPriority 用于计算按钮的优先级,其值总是从 1 到 3。
我可以用上面的代码添加单选按钮。我怀疑这就是问题所在。
下一段代码是问题变得更加明显的地方:
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
中创建的单选按钮的引用。例如,您可以将它们保存在使用面板作为键的字典中,并将三个单选按钮保存在一个数组中。
然后,您只需查看字典即可恢复单选按钮并检查其状态。
我正在开发一个在一个表单上包含多个面板(准确地说是八个)的应用程序。在每个 Panel 中有一个 TableLayoutPanel 和三个 Radiobuttons(以及其他一些不重要的组件)。单选按钮设置特定面板输入的优先级(优先级 1、2 和 3)。
我无意在八个面板中的每一个面板上放置三个单选按钮,因为我相信有更有效的方法可以做到这一点。下面是用于放置单选按钮的代码:
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用于设置单选按钮所在的列。 lPriority 用于计算按钮的优先级,其值总是从 1 到 3。
我可以用上面的代码添加单选按钮。我怀疑这就是问题所在。
下一段代码是问题变得更加明显的地方:
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
中创建的单选按钮的引用。例如,您可以将它们保存在使用面板作为键的字典中,并将三个单选按钮保存在一个数组中。
然后,您只需查看字典即可恢复单选按钮并检查其状态。