将值从各种文本框传递到另一个

时间:2016-04-14 20:37:04

标签: c# winforms visual-studio

我有几个不同的单选按钮和四个文本框。我想要实现的是从所有文本框中获取值并将其全部显示在一个摘要文本框中(摘要)。我设法从所有单选按钮获取值但是我无法从文本框中获取值。

我希望它看起来像这样: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);

        }

1 个答案:

答案 0 :(得分:3)

如果你有这个目标,答案很简单:

private string GetTextFromTextBoxes()
{
    var textboxes = 
             this.Controls.OfType<GroupBox>()
                          .OrderBy(x => x.TabIndex)
                          .SelectMany(x => x.Controls.OfType<TextBox>())
                          .Select(x => x.Text);

    return string.Join("-", textboxes);
}

假设文本框也在组框中,那就是背叛。如果文本框直接位于您的上方,则会删除对SelectMany的调用并将第一个OfType<GroupBox>更改为OfType<TextBox>

<强>更新

  

开始时保持冷静...

如果在Summary TextBox的TextChanged事件中调用此代码,则表明您创建了无限循环。因为当TextChanged事件被调用时,它有什么不同,Text的{​​{1}}属性会发生变化。但是因为你在那个事件中设置了这个文本,所以会一次又一次地引发事件,等等。

因此,您必须弄清楚摘要文本框何时需要更新并从代码中的该点或事件调用代码。这就是我创建一个组成文本的函数的原因,而不是直接更改上面代码中文本框中的文本。