我需要一個文本框,該文本框會隨著其他文本框中的值的更改而動態更改,并且“總計”文本框的值(將是轉換為字串的整數)必須具有其他值的總和。有沒有辦法做到這一點而不必為每個其他文本框創建一個 TextChanged 事件?
uj5u.com熱心網友回復:
在 Visual Studio 中,轉到 Form1.cs[Design] 并左鍵單擊一個文本框,然后在右側下側單擊顯示“事件”的閃電。搜索“TextChanged”并輸入您希望如何命名事件(例如“textBox1_TextChanged”)。點擊回車后,您應該會自動被發送到 Form1.cs,在那里創建了一個新的 void。在那里,插入 Stefanovici 提出的代碼(盡管將 textbox1.value 更改為 textbox1.text)并沖洗并為每個文本框重復
private void textBox1_TextChanged(object sender, EventArgs e) //should automatically be created
{
Label1.text= textbox1.text textbox2.text textbox3.text .....
}
編輯:您還可以將多個文本框系結到同一個事件。為每個文本框命名相同的事件將在更改任一文本框時呼叫該事件,從而減少代碼量
uj5u.com熱心網友回復:
一種“無需”連接所有事件的可能解決方案是使用每個文本框DataBindings屬性。唯一的問題是我們需要某種DataSource. 一個簡單的類可能是一個簡單的解決方案。例子…
我們可以string為每個文本框創建一個類,該屬性代表string每個文本框中的每個文本框。然后一個Total屬性成為所有文本框的總和。一旦我們實體化了這個類物件,我們就可以將每個文本框分配給DataBindings我們類中的匹配屬性。這個簡化的TextBoxTotals類可能看起來像……
public class TextBoxesTotal {
public string TB1 { get; set; }
public string TB2 { get; set; }
public string TB3 { get; set; }
public string Total {
get {
int.TryParse(TB1, out int v1);
int.TryParse(TB2, out int v2);
int.TryParse(TB3, out int v3);
return (v1 v2 v3).ToString();
}
}
}
然后在表單加載事件中,您可以實體化一個新TextBoxesTotal物件,然后將其用作DataSource文本框DataBindings。用法可能看起來像……
TextBoxesTotal TextBoxTotals = new TextBoxesTotal();
public Form2() {
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e) {
textBox1.DataBindings.Add(new Binding("Text", TextBoxTotals, "TB1"));
textBox2.DataBindings.Add(new Binding("Text", TextBoxTotals, "TB2"));
textBox3.DataBindings.Add(new Binding("Text", TextBoxTotals, "TB3"));
textBox4.DataBindings.Add(new Binding("Text", TextBoxTotals, "Total"));
}
當用戶更改文本框中的文本然后“離開”文本框時,這將“更新”總計文本框。抱歉,如果這沒有太大幫助,因為在我看來,我們仍然必須分配每個文本框。但它可能會少一點代碼。如果這沒有幫助,請告訴我,我將洗掉它。
uj5u.com熱心網友回復:
我假設您不想TextChanged為每個都創建事件處理程式,TextBox因為這是一項乏味的作業。有一種方法可以讓它變得簡單。
從這樣的欄位開始:
private TextBox[] textBoxes = null;
然后你可以TextChanged像這樣設定所有的事件處理程式:
textBoxes = new []
{
textBox1, textBox2, textBox3,
textBox4, textBox5,
};
foreach (var tb in textBoxes)
{
tb.TextChanged = (_, _) => UpdateTotal();
}
現在UpdateTotals可以以任何您想要的方式定義。這是我的版本:
private void UpdateTotal()
{
var value =
textBoxes
.Select(x =>
double.TryParse(x.Text, out double value)
? value
: 0.0)
.Sum();
textBoxTotal.Text = value.ToString();
}
uj5u.com熱心網友回復:
應該是這樣的
標簽1.text= textbox1.value textbox2.value textbox3.value .....
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/419998.html
標籤:
