我需要更改TextBox的名称,而不是文本框中的文本。然后使用该名称命名单独的文本框

时间:2016-09-19 01:03:14

标签: c# visual-studio

我有六个文本框。

|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.
}

我一直试图解决这个问题但是一旦我进入[get] [set]和更复杂的代码,我就会失去它。我是一名平面设计师,不是真正的程序员,但我正在努力学习。

1 个答案:

答案 0 :(得分: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);
}