2016-09-19 88 views
-2

我有六個文本框。我需要更改文本框的名稱,而不是文本框中的文本。然後使用該名稱來命名一個單獨的文本框

|TB1| |TB102| |TB103| 
|TB2| |TB202| |TB203| 
  • 我需要使用TB1作爲一個完整的整數,說100
  • TB102需要半分TB1。
  • TB103需要按季度劃分。

這裏是我的代碼:

private void TB_Half_TextChanged(object sender, EventArgs e) 
{ 
    TextBox tbFull = (TextBox)sender; //determine which textbox is changed 
    TextBox tbHalf = (TextBox)sender; //save the name to add 02 to it later 
             // tbHalf == tbFull + "02";? 

    int ATTFull = Convert.ToInt32(tbFull.Text); //convert textbox to integer 
    int ATTHalf = ATTFull/2;    //divide by 2 
    string STRback = Convert.ToString(ATTHalf); //convert integer to textbox 
    //tb.Name = TBHalf + "02";       //add 02 to tb name 

    TB102.Text = STRback; //result in TB box 02 
    //how do I use TbHalf instead? 
    //I need to take tbHalf and add 02 to it so I can use this code on any TextBox. 
} 

我一直在試圖找出了這一點,但一旦我進入[獲取] [設定],更復雜的代碼,我失去它。我是一名平面設計師,並不是一名程序員,但我正在努力學習。

+0

閱讀了幾個問題,但不明白,在你的代碼tbfull和tbHalf指向相同的控件。如果你想要做的只是解決或訪問相應的文本框,你可以使用forms.controls給你所有的控制。然後你可以做的是使用文本框名稱,然後搜索添加了02後綴的控件。 – dgorti

+0

至於誰想要使用堆棧溢出的幫助下,資源是一個有抱負的程序員,則您有義務仔細閱讀在每個底部參考的網站上幫助主題,如[問]和[MCVE],以及網頁那些文章。這些將爲您提供有關如何以清晰,可回答的方式提出問題的出色建議。 –

+0

一切工作完美,直到我到達TB102的代碼的底部。它總是將結果寫入TextBox TB102。 通過在TB1或TB2中進行更改來激活此「功能」,但兩者都將寫入TB102。我想要TB1中的更改​​將結果寫入TB102,並更改TB2以在TB202中顯示結果。我將增加20套這些盒子。 @dgorti - 我認爲你是正確的,我想從(文本框)發送者使用文本框名和後綴02添加到它。我在想它需要改成一個字符串,然後回到一個控件?比這更簡單嗎? – Naythan

回答

0

你所要做的就是「變」聲明的變量的名稱,它沒有任何意義。變量的名稱是不可變的 - 一旦你設置了名字,你就不能改變它。這是因爲變量的名稱本身不是一個值,而是您正在使用的變量的任意標識符。

據我所知,你正在試圖確定的兩個文本框是否觸發的事件。但是,使用:

TextBox tbFull = (TextBox)sender; 
TextBox tbHalf = (TextBox)sender; 

不會幫助您確定哪個文本框觸發了該事件。它所做的只是給你兩個指向內存中完全相同的值的變量,這是多餘的。

要做到這一點,你需要給你的文本框在設計視圖不同的名稱(下在屬性對話框「名稱」),然後使用這些名稱對發送者確定哪些文本框觸發事件。

private void TB_Half_TextChanged(object sender, EventArgs e) 
{ 
    // Determine the source and target boxes 
    TextBox source = (TextBox)source; 
    TextBox target; 

    if (sender == TB1) 
     target = TB102;  // TB1triggered the event, so update TB102 
    else if (sender == TB102) 
     target = TB103;  // TB102 triggered the event, so update TB103 
    else 
     return;    // Somehow something else triggered the event, 
           // and we don't know what to do when that happens 

    // Whichever text box triggered the event, the math is the same 
    target.Text = Convert.ToString(Convert.ToInt32(source.Text)/2); 
} 
+0

謝謝你的回答Abion47。正如@dgorti上面提到的,我認爲我需要使用(TextBox)發件人的名稱,並找到後綴爲02或03的下一個文本框。我怎樣才能以這種方式找到控件? – Naythan

+0

您可以使用'this.Controls'來獲取連接到窗體窗口的所有控件的列表(其中「this」是窗體的名稱),但是該列表不是以任何特定方式排序的。例如,如果'TB1'是索引4處的孩子,那麼索引5和6分別是'TB102'和'TB103'。這就是爲什麼直接按名稱引用控件會更容易,就像在代碼中分配給'TB102.Text'時所做的一樣,而不是在完整的控件列表中嘗試手動找到它們。 – Abion47

相關問題