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

C# 将值从各种文本框传递到另一个文本框,c#,winforms,visual-studio,C#,Winforms,Visual Studio,我有几个不同的单选按钮和四个文本框。我想要实现的是从所有文本框中获取值,并将其全部显示在一个摘要文本框(summary)中。我已设法从所有单选按钮中获取值,但无法从文本框中获取值 我希望这个看起来像这样:RB1-RB2-RB3-TXTB1-TXTB2-TXTB3-TXTB4 请参阅下面从所有单选按钮检索文本的代码: 我已经添加了提供的代码,但似乎效果不好: private void summary_TextChanged(object sender, EventArgs e)

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

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

        }

private void summary\u TextChanged(对象发送方,事件参数e)
{
var radios=this.Controls.OfType().OrderBy(x=>x.TabIndex)
.SelectMany(x=>x.Controls.OfType())
.Where(x=>x.Checked==true)
.Select(x=>x.Text).ToList();
this.summary.Text=string.Join(“-”,收音机);
var textboxs=this.Controls.OfType().OrderBy(x=>x.TabIndex)
.SelectMany(x=>x.Controls.OfType())
.Select(x=>x.Text).ToList();
this.summary.Text=string.Join(“-”,文本框);
}

如果你已经做到了这一点,答案很简单:

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);
}
私有字符串getTextFromTextBox()
{
变量文本框=
this.Controls.OfType()
.OrderBy(x=>x.TabIndex)
.SelectMany(x=>x.Controls.OfType())
.选择(x=>x.Text);
返回字符串。Join(“-”,文本框);
}
当然,假设文本框也在GroupBox中。如果文本框直接位于from上,您将取消对SelectMany的调用,并将type的第一个
更改为type

更新

启动时一直冻结

如果在
摘要文本框的TextChanged事件中调用此代码,则创建了一个无休止的循环。因为当调用
TextChanged
事件时,
TextBox
Text
属性发生了更改,这有什么不同呢。但是,由于您在该事件中设置了此文本,因此该事件将一次又一次地引发,以此类推


因此,您必须确定何时需要更新摘要文本框,并从代码中的该点或事件调用代码。这就是为什么我创建了一个合成文本的函数,而不是在上面的代码中直接更改文本框中的文本

那么为什么这不适用于
TextBox
?我认为将结尾改为
。选择(x=>x.Text).ToList()
也将返回字符串。请以他想要的格式加入。谢谢,我已将代码添加到我的应用程序中,但出现问题,应用程序在启动时一直冻结。我不确定我是否在正确的位置添加它。private void summary_TextChanged(object sender,EventArgs e){var radios=this.Controls.OfType().OrderBy(x=>x.TabIndex)。SelectMany(x=>x.Controls.OfType())。其中(x=>x.Checked==true)。Select(x=>x.Text.ToList();this.summary.Text=string.Join(“-”,radios);var textboxs=this.Controls.OfType().OrderBy(x=>x.TabIndex)。SelectMany(x=>x.Controls.OfType())。Select(x=>x.Text);返回string.Join(“-”,textbox);}