我有一个带有60个单选按钮的Win-form。我希望使用以下代码从已检查的单选按钮中获取文本:
private void button1_Click_1(object sender, EventArgs e)
{
string[] boxes = new string[30];
string[] names = new string[30];
for (int i = 1; i < boxes.Length; i++)
{
var label = this.Controls.Find("lb" + i, true)[0];
var panelcontr = this.Controls.Find("panel" + i, true)[0] as Panel;
var panels = panelcontr;
var p = panels.Controls.OfType<RadioButton>()
.FirstOrDefault(r => r.Checked).Text;
boxes[i] += p;
names[i] += label.Text;
tobeWritten += names[i] + boxes[i] + ",";
textBox1.Text = "Anamnese(" + tobeWritten + ")";
}
}
它工作得很好,但问题是,当只有一个无线电盒未经检查时,我会在调试期间收到警告。我知道警告出现的原因,但我希望程序不要停止。
我要问的是:当我没有检查一个例如radioButton时,是否可以创建一个出现的MessageBox。说“你必须分配每个按钮”。我单击“确定” - 按钮,我可以检查未选中的按钮。
我尝试了an other question at StackOverflow的建议,但没有成功,因为函数panels.Controls.OfType<RadioButton>()
在查询之前执行。
答案 0 :(得分:0)
替换
会有帮助吗?var p = panels.Controls.OfType<RadioButton>()
.FirstOrDefault(r => r.Checked).Text;
与
var ch = panels.Controls.OfType<RadioButton>()
.FirstOrDefault(r => r.Checked);
if (ch == null)
{
// show message box and break;
}
var p = ch.Text;
答案 1 :(得分:0)
您的问题在这里:
var p = panels.Controls.OfType<RadioButton>()
.FirstOrDefault(r => r.Checked).Text;
如果FirstOrDefault调用的结果为null,则Text调用将抛出空引用异常。您可以通过拆分调用来避免这种情况,以便调用FirstOrDefault,检查结果是否为null,然后在知道结果不为null时调用Text。
答案 2 :(得分:0)
现在使用此代码:
private void button1_Click_1(object sender, EventArgs e)
{
string[] boxes = new string[30];
string[] names = new string[30];
for (int i = 1; i < boxes.Length; i++)
{
var label = this.Controls.Find("lb" + i, true)[0];
var panelcontr = this.Controls.Find("panel" + i, true)[0] as Panel;
var panels = panelcontr;
var radiobutton = panels.Controls.OfType<RadioButton>()
.FirstOrDefault(r => r.Checked);
if(radiobutton==null)
{
MessageBox.Show("Check all Buttons!");
break;
}
boxes[i] += radiobutton.Text;
names[i] += label.Text;
tobeWritten += names[i] + boxes[i] + ",";
textBox1.Text = "Anamnese(" + tobeWritten + ")";
}
}