3 回答

TA貢獻1780條經(jīng)驗 獲得超4個贊
您當(dāng)前的問題是直接對文本框中存儲的值進行操作。所以當(dāng)你這樣做時:
txtBox7.Text = value.ToString();
您不檢查當(dāng)前存儲在 txtBox7 中的值。
所以你可以按照2條路徑來解決它:
使用與 int 相同的解析從 txtBox7 中獲取值并將其放入變量中,然后向該變量添加值并然后將其保存回目標(biāo)文本框。
您可以在邏輯背后有一些模型(如果這些數(shù)字代表某些東西)并更新模型(通過根據(jù)您的“業(yè)務(wù)”規(guī)則將數(shù)字放入模型的屬性中)。之后,通過將模型中的值放入文本框,將 UI(文本框)與模型同步。理想情況下,您希望為其使用數(shù)據(jù)綁定(以便在模型更改后自動刷新您的 UI)。
以下是 1 的代碼示例:
if (int.TryParse(txtBox1.Text, out int value) &&
int.TryParse(txtBox7.Text, out int oldValue7) &&
int.TryParse(txtBox7.Text, out int oldValue8)
)
{
value += changeBy;
oldValue7 += value;
oldValue8 += value;
txtBox1.Text = value.ToString();
txtBox7.Text = oldValue7.ToString();
txtBox8.Text = oldValue8.ToString();
}
如果您需要有關(guān)數(shù)據(jù)綁定的更多信息,請參閱文檔。您必須花時間學(xué)習(xí)和習(xí)慣這種方法,但它可以讓您將模型邏輯與 UI 解耦,這對于復(fù)雜的模型和 UI 是有益的。
以下是我為業(yè)務(wù)規(guī)則引入單獨的類的含義的示例:
class MyModel
{
public int MyFirstInputValue {get; set;}
public int MySecondInputValue {get; set;}
public int MyFirstResultValue {get; private set;}
public int MySecondResultValue {get; private set;}
public void RunMyCalculationLogic()
{
// your calculations go here...
MyFirstResultValue = MyFirstInputValue + MySecondInputValue;
MySecondResultValue = MyFirstInputValue - MySecondInputValue;
}
}
然后你或多或少像這樣使用這個模型:
var myModel = new MyModel();
myModel.MyFirstInputValue = 1; // parse value from input textBox1
myModel.MySecondInputValue = 2; // parse value from input textBox2
myModel.RunMyCalculationLogic();
// TODO: use results from MyFirstResultValue and MySecondResultValue to populate textBoxes you need
我希望這足以讓您開始。

TA貢獻1829條經(jīng)驗 獲得超7個贊
如果您使用 NumericUpDown 控件而不是文本框,您的生活會輕松得多。您可以將所有 NUD 設(shè)置為默認(rèn)值 0,為它們編寫一個值更改事件處理程序(將所有 NUD 值更改事件鏈接到同一個處理程序),該處理程序具有一行代碼:
nud7.Value = nud1.Value + nud2.Value + nud3.Value ...
如果您要將 nud1 到 nud6 放入構(gòu)造函數(shù)中的類范圍數(shù)組中,那么您甚至可以使用 LINQ 將其簡化為:
nud7.Value = myNuds.Sum(n => n.Value);
這是一步一步 - 在新項目中執(zhí)行此操作。大約需要 10 分鐘:
制作一個新的 Windows 窗體應(yīng)用程序
在表格上輸入 8 個數(shù)字
選擇全部,將它們的最小值和值設(shè)置為 0,將最大值設(shè)置為相關(guān)的值
僅選擇前 6 個
轉(zhuǎn)到屬性網(wǎng)格,單擊閃電,找到與值更改相關(guān)的事件(可能稱為 ValueChanged,我現(xiàn)在不在電腦上進行測試)并寫入“AllChanged”在旁邊的框中按回車鍵
出現(xiàn)代碼視圖。將我發(fā)布的第一個代碼(添加所有值并將結(jié)果存儲在數(shù)字 updown 7 的值中的代碼)放在事件處理程序中
運行項目
我不確定為什么你有兩個總計框..但我相信你可以解決這個問題
注意不要將相同的事件處理程序添加到框 7;你會導(dǎo)致無限循環(huán),導(dǎo)致堆棧溢出

TA貢獻1799條經(jīng)驗 獲得超9個贊
在嘗試了我在另一個 Winforms 項目中使用的一些代碼之后。我找到了解決問題的方法。這就是我所做的。
TextBox[] txtbox;
public FormOne()
{
InitializeComponent();
Sqlconn con = new Sqlconn();
txtbox = new TextBox[] { txtBox1, txtBox2, txtBox3, txtBox4, txtBox5, txtBox6, txtBox7};
foreach (TextBox text in txtbox)
text.TextChanged += new EventHandler(txtbox_TextChanged);
}
private void txtbox_TextChanged(object sender, EventArgs e)
{
int value = 0;
int total = 0;
foreach (TextBox text in txtbox)
{
if (int.TryParse(text.Text, out value))
total += value;
}
txtBox7.Text = total.ToString();
txtBox8.Text = total.ToString();
private void FormOne_Load(object sender, EventArgs e)
{
}
感謝大家的支持。
- 3 回答
- 0 關(guān)注
- 218 瀏覽
添加回答
舉報