我有几个不同的单选按钮和四个文本框。
我想要实现的是从所有文本框中获取值并将其全部显示在一个摘要文本框中(摘要)。
我设法从所有单选按钮获取值但是我无法从文本框中获取值。
我希望看起来像这样:
RB1 - RB2 -RB3 - TXTB1 - TXTB2 - TXTB3 - TXTB4
单选按钮和文本框都在组框中。
private void summary_TextChanged(object sender, EventArgs e)
{
var radios = this.Controls.OfType<GroupBox>().OrderBy(x => x.TabIndex)
.SelectMany(x => x.Controls.OfType<RadioButton>())
.Where(x => x.Checked == true)
.Select(x => x.Text).ToList();
this.summary.Text = string.Join("-", radios);
var textboxes = this.Controls.OfType<GroupBox>().OrderBy(x => x.TabIndex)
.SelectMany(x => x.Controls.OfType<TextBox>())
.Select(x => x.Text).ToList();
this.summary.Text = string.Join("-", textboxes);
}
答案 0 :(得分:1)
最后一行用文本框的内容替换摘要文本框的内容,因此无线电按钮的内容丢失。
您需要做的是附加到上一个内容
// Adding also a - to separate radiobuttons from textboxes
this.summary.AppendText("-" + string.Join("-", textboxes));
此外,如果您已将此代码附加到summary
TextChanged事件,则存在一个大问题,因为调用此代码时您更改了同一TextBox summary
的内容,因此代码会自行调用。
通常,WinForms引擎足够智能以避免这种递归,但是您的代码会违反Form引擎的安全措施,因为您将summary
内容更改了两次。
所以可能发生的事情是:
不要将此代码添加为摘要文本框的事件处理程序,只需将其用作其他文本框TextChanged事件或RadioButtons检查事件的事件处理程序。