2016-09-19 89 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

相关问题