2016-04-15 173 views
0

我有幾個不同的單選按鈕和四個文本框。將文本框/單選按鈕的值傳遞到一個文本框

我想要實現的是從所有文本框中獲取值並將其顯示在一個摘要文本框(摘要)中。

我設法從所有單選按鈕獲取值,但是我無法從文本框中獲取值。

我想這是這樣的:

RB1 - RB2 -RB3 - TXTB1 - TXTB2 - TXTB3 - TXTB4

單選按鈕以及文本框都在groupboxes。

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

從你的問題不清楚是什麼問題。你沒有得到文本框文本?摘要是空的? – Steve

+0

你確定它們是Type TexBox嗎?不是其他類型,例如來自Telerik? –

+1

奇怪的是,只要在事件處理程序中進行了唯一更改,就可以將此代碼放在'summary_TextChanged()'中。 –

回答

1

最後一行用文本框的內容替換了摘要文本框的內容,因此單選按鈕的內容丟失了。
你需要做的是追加到以前的內容

// Adding also a - to separate radiobuttons from textboxes 
this.summary.AppendText("-" + string.Join("-", textboxes)); 

此外,如果有附加此代碼到summary TextChanged事件則因爲當這個代碼是叫你修改的內容有一個很大的問題相同的文本框summary,因此代碼回憶自己。

通常,WinForms引擎足夠智能以避免這種遞歸,但是由於您更改了summary內容兩次,所以代碼會破壞Form引擎的安全措施。

那麼,什麼是可能發生的事情是這樣的:

  1. 總結是空白的,你以某種方式觸發TextChanged事件
  2. 概要載於無線電文本,TextChanged事件再次召回
  3. 摘要設置爲相同的單選文字,沒有任何變化,並且WinForms引擎避免調用TextChanged事件處理程序
  4. 摘要設置爲文本框文本(或者新文本被追加到前一個文本) ,框TextChanged回顧
  5. 點2

繼續不要添加此代碼爲摘要文本框的事件處理程序,只是用它作爲TextChanged事件的其他文本框的事件處理程序或爲單選按鈕檢查事件。

+0

謝謝,當我將此代碼添加到放置所有文本框的組框中時,似乎沒問題,但單選按鈕現在無法正常工作。我會再次檢查代碼並回復您。 – Truex

+0

選擇添加此代碼的位置非常重要。我會將每個textbox.TextChanged事件設置爲此代碼,並且我會對RadioButton.CheckedChanged事件做同樣的事情 – Steve

+0

我應該將整個代碼(無線電+文本框)添加到每個單選按鈕和文本框嗎? – Truex

相關問題