亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將整數值從 5 個不同的文本框傳遞到 2 個不同的文本框

如何將整數值從 5 個不同的文本框傳遞到 2 個不同的文本框

C#
飲歌長嘯 2023-12-17 16:54:36
我有一個帶有多個按鈕的 Winforms 應用程序。它要求用戶單擊按鈕,無論需要多少次,該按鈕 1 單擊事件都會在文本框 1 內添加一個整數值,該整數值隨著每次單擊按鈕 1 而遞增。然后我有button2,當單擊它時,它會從textbox1 內的整數值中減去。現在我也有 textbox2、textbox3、textbox4、textbox5 和 textbox6 做同樣的事情,每個都有自己的一對按鈕來加和減。它們都彼此獨立工作。 Txtbox1,2,3,4,5,6 是發送者。當嘗試將 txtbox1、txtbox2、txtbox3、txtbox4、txtbox5 和 txtbox6 中的整數值傳遞到 txtbox7 和 txtbox8(接收 txtbox)時,我的問題出現了。每個文本框還有兩個用于添加值和減去值的按鈕。我能夠將 txtbox1 的值傳遞到 txtbox7 & txtbox8 沒有問題。當我使用相同的代碼讓所有其他 txtboxes 將 int 值傳遞給 txtbox7 & 時,問題就開始了。 txtbox8,6 個 txtbox 之一的輸入將相互覆蓋。例如如果我在 txtbox1 上點擊 5 次,它會將 int 5 傳遞給 txtbox1、txtbox7 和 txtbox1。 txtbox8,但如果我去點擊 txtbox2 兩次,然后點擊 txtbox7 & 8 值 5 并未消失,而是顯示新值 2。我想要發生的是,當單擊任何一個按鈕時,傳遞到 2 個接收文本框的值需要添加到已經存在的 int 值中。我不知道這是否足夠解釋。這是我的代碼。private void button1Add_Click(object sender, EventArgs e){  AddToTexBox1(1);}private void AddToTextBox1(int changeBy){  if (int.TryParse(txtBox1.Text, out int value))  {     value += changeBy;     txtBox1.Text = value.ToString();     txtBox7.Text = value.ToString();     txtBox8.Text = value.ToString();  }  else  {     MessageBox.Show("Invalid Integer in TextBox!");  }}private void Btn2Subtract_Click(object sender, EventArgs e){     AddToTextBox1(-1);}該代碼對于 txtBox 1 和 txtBox7 & 運行良好。 txtBox8 但當我嘗試對其他 txtBox 使用相同的內容時,它無法按預期工作。任何幫助將不勝感激。
查看完整描述

3 回答

?
Helenr

TA貢獻1780條經驗 獲得超4個贊

您當前的問題是直接對文本框中存儲的值進行操作。所以當你這樣做時:

txtBox7.Text = value.ToString();

您不檢查當前存儲在 txtBox7 中的值。

所以你可以按照2條路徑來解決它:

  1. 使用與 int 相同的解析從 txtBox7 中獲取值并將其放入變量中,然后向該變量添加值并然后將其保存回目標文本框。

  2. 您可以在邏輯背后有一些模型(如果這些數字代表某些東西)并更新模型(通過根據您的“業務”規則將數字放入模型的屬性中)。之后,通過將模型中的值放入文本框,將 UI(文本框)與模型同步。理想情況下,您希望為其使用數據綁定(以便在模型更改后自動刷新您的 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();

}

如果您需要有關數據綁定的更多信息,請參閱文檔。您必須花時間學習和習慣這種方法,但它可以讓您將模型邏輯與 UI 解耦,這對于復雜的模型和 UI 是有益的。


以下是我為業務規則引入單獨的類的含義的示例:


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

我希望這足以讓您開始。


查看完整回答
反對 回復 2023-12-17
?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

如果您使用 NumericUpDown 控件而不是文本框,您的生活會輕松得多。您可以將所有 NUD 設置為默認值 0,為它們編寫一個值更改事件處理程序(將所有 NUD 值更改事件鏈接到同一個處理程序),該處理程序具有一行代碼:

nud7.Value = nud1.Value + nud2.Value + nud3.Value ...

如果您要將 nud1 到 nud6 放入構造函數中的類范圍數組中,那么您甚至可以使用 LINQ 將其簡化為:

nud7.Value = myNuds.Sum(n => n.Value);

這是一步一步 - 在新項目中執行此操作。大約需要 10 分鐘:

  • 制作一個新的 Windows 窗體應用程序

  • 在表格上輸入 8 個數字

  • 選擇全部,將它們的最小值和值設置為 0,將最大值設置為相關的值

  • 僅選擇前 6 個

  • 轉到屬性網格,單擊閃電,找到與值更改相關的事件(可能稱為 ValueChanged,我現在不在電腦上進行測試)并寫入“AllChanged”在旁邊的框中按回車鍵

  • 出現代碼視圖。將我發布的第一個代碼(添加所有值并將結果存儲在數字 updown 7 的值中的代碼)放在事件處理程序中

  • 運行項目

我不確定為什么你有兩個總計框..但我相信你可以解決這個問題

注意不要將相同的事件處理程序添加到框 7;你會導致無限循環,導致堆棧溢出


查看完整回答
反對 回復 2023-12-17
?
揚帆大魚

TA貢獻1799條經驗 獲得超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)

            {


            }


感謝大家的支持。


查看完整回答
反對 回復 2023-12-17
  • 3 回答
  • 0 關注
  • 240 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號