C#文本框访问

C#文本框访问,c#,textbox,C#,Textbox,我对文本框有一个恼人的问题。我在一个文本框中输入数据,点击按钮,我需要在另一个文本框中显示结果。我真的不知道为什么我的方法行不通。我没有得到任何错误,但它不会显示结果。谢谢 所有文本框都是在运行时动态创建的。 代码如下: private void button2_Click(object sender, EventArgs e) { TextBox tbox8 = new TextBox(); tbox8.Name = "textBox8";

我对文本框有一个恼人的问题。我在一个文本框中输入数据,点击按钮,我需要在另一个文本框中显示结果。我真的不知道为什么我的方法行不通。我没有得到任何错误,但它不会显示结果。谢谢 所有文本框都是在运行时动态创建的。 代码如下:

     private void button2_Click(object sender, EventArgs e)
    {
        TextBox tbox8 = new TextBox();
        tbox8.Name = "textBox8";
        tbox8.Location = new System.Drawing.Point(54 + (0), 55);
        tbox8.Size = new System.Drawing.Size(53, 20);
        this.Controls.Add(tbox8);
        tbox8.BackColor = System.Drawing.SystemColors.InactiveCaption;
        tbox8.TextChanged += new EventHandler(tbox8_TextChanged);

        TextBox tbox9 = new TextBox();
        tbox9.Name = "textBox9";
        tbox9.Location = new System.Drawing.Point(54 + (60), 55);
        tbox9.Size = new System.Drawing.Size(53, 20);
        this.Controls.Add(tbox9);
        tbox9.BackColor = System.Drawing.SystemColors.InactiveCaption;
        tbox9.TextChanged += new EventHandler(tbox9_TextChanged);

     }//button_click

    //input data into texbox8
    TextBox tbox;
    double var1;
    private void tbox8_TextChanged(object sender, EventArgs e)
    {
        tbox = sender as TextBox;
        var1 = Convert.ToDouble(tbox.Text);
    }

    //display the result in textbox9
    TextBox tbox2;
    private void tbox9_TextChanged(object sender, EventArgs e)
    {
        tbox2 = sender as TextBox;
    }

    //perform calculation and on button click display data on referenced textbox
    private void button3_Click(object sender, EventArgs e)
    {
        double result2 = var1 * 2;
        if( tbox2 != null)
        {
            tbox2.Text = result2.ToString(); 
        }      
    }

以下是注释掉不必要位的代码,并添加了一些新行:

TextBox tbox8 = new TextBox(); //make it a member variable
TextBox tbox9 = new TextBox(); //same for this one

private void button2_Click(object sender, EventArgs e)
{
    tbox8.Name = "textBox8";
    tbox8.Location = new System.Drawing.Point(54 + (0), 55);
    tbox8.Size = new System.Drawing.Size(53, 20);
    this.Controls.Add(tbox8);
    tbox8.BackColor = System.Drawing.SystemColors.InactiveCaption;
    tbox8.TextChanged += new EventHandler(tbox8_TextChanged);

    tbox9.Name = "textBox9";
    tbox9.Location = new System.Drawing.Point(54 + (60), 55);
    tbox9.Size = new System.Drawing.Size(53, 20);
    this.Controls.Add(tbox9);
    tbox9.BackColor = System.Drawing.SystemColors.InactiveCaption;
    tbox9.TextChanged += new EventHandler(tbox9_TextChanged);

 }//button_click

//input data into texbox8
//TextBox tbox;
double var1;
private void tbox8_TextChanged(object sender, EventArgs e)
{
    //tbox = sender as TextBox;
    var1 = Convert.ToDouble(tbox8.Text);//tbox8
}

//display the result in textbox9
//TextBox tbox2;//tbox2 is actually tbox9 anyway
private void tbox9_TextChanged(object sender, EventArgs e)
{
//    tbox2 = sender as TextBox;//so we don't need a tbox2
    //do something
}

//perform calculation and on button click display data on referenced textbox
private void button3_Click(object sender, EventArgs e)
{
    double result2 = var1 * 2;
    //if( null != tbox9 ) 
    //{
        tbox9.Text = result2.ToString(); //changed to tbox9
    //}      
}

然而,这仍然存在问题。当用户多次单击按钮2时会发生什么情况?

这是您的代码,注释掉了不必要的位,并添加了一些新行:

TextBox tbox8 = new TextBox(); //make it a member variable
TextBox tbox9 = new TextBox(); //same for this one

private void button2_Click(object sender, EventArgs e)
{
    tbox8.Name = "textBox8";
    tbox8.Location = new System.Drawing.Point(54 + (0), 55);
    tbox8.Size = new System.Drawing.Size(53, 20);
    this.Controls.Add(tbox8);
    tbox8.BackColor = System.Drawing.SystemColors.InactiveCaption;
    tbox8.TextChanged += new EventHandler(tbox8_TextChanged);

    tbox9.Name = "textBox9";
    tbox9.Location = new System.Drawing.Point(54 + (60), 55);
    tbox9.Size = new System.Drawing.Size(53, 20);
    this.Controls.Add(tbox9);
    tbox9.BackColor = System.Drawing.SystemColors.InactiveCaption;
    tbox9.TextChanged += new EventHandler(tbox9_TextChanged);

 }//button_click

//input data into texbox8
//TextBox tbox;
double var1;
private void tbox8_TextChanged(object sender, EventArgs e)
{
    //tbox = sender as TextBox;
    var1 = Convert.ToDouble(tbox8.Text);//tbox8
}

//display the result in textbox9
//TextBox tbox2;//tbox2 is actually tbox9 anyway
private void tbox9_TextChanged(object sender, EventArgs e)
{
//    tbox2 = sender as TextBox;//so we don't need a tbox2
    //do something
}

//perform calculation and on button click display data on referenced textbox
private void button3_Click(object sender, EventArgs e)
{
    double result2 = var1 * 2;
    //if( null != tbox9 ) 
    //{
        tbox9.Text = result2.ToString(); //changed to tbox9
    //}      
}
然而,这仍然存在问题。当用户多次单击按钮2时会发生什么情况?

假设tbox8(尝试使用有意义的名称BTW)是应该输入的文本,而tbox14是您希望输出的位置,为什么您只在tbox14的TextChanged事件中设置tbox2变量?您的代码可能无法工作,因为tbox2始终为空,因为您从未为tbox14执行TextChanged事件。为什么要使用变量tbox2而不是仅仅使用tbox14呢

此外,解析tbox8的TextChanged事件中的文本可能是错误的。TextChanged事件将在每次击键时触发。为什么不在button3单击处理程序中执行一次呢?或者,当它失去焦点时再做

试试这个(注意:这不是一个糟糕的代码)。首先,清除所有TextChanged事件,然后:

private void button3_Click(object sender, EventArgs e)
{
    var1 = Convert.ToDouble(tbox8.Text);
    double result2 = var1 * 2;
    tbox14.Text = result2.ToString();    
}
假设tbox8(尝试使用有意义的名称BTW)是应该输入文本的名称,而tbox14是您期望输出的位置,为什么您只在tbox14的TextChanged事件中设置tbox2变量?您的代码可能无法工作,因为tbox2始终为空,因为您从未为tbox14执行TextChanged事件。为什么要使用变量tbox2而不是仅仅使用tbox14呢

此外,解析tbox8的TextChanged事件中的文本可能是错误的。TextChanged事件将在每次击键时触发。为什么不在button3单击处理程序中执行一次呢?或者,当它失去焦点时再做

试试这个(注意:这不是一个糟糕的代码)。首先,清除所有TextChanged事件,然后:

private void button3_Click(object sender, EventArgs e)
{
    var1 = Convert.ToDouble(tbox8.Text);
    double result2 = var1 * 2;
    tbox14.Text = result2.ToString();    
}

假设结果*2不会导致double的算术溢出,这样的方法应该可以工作。如果在tbox8中输入的值无法解析为双精度,则单击按钮3后在tbox9中显示的结果将为0

因为我没有使用文本框的任何事件,所以我不需要为它们创建处理程序。我还禁用了按钮2被点击后,使它不能再次点击

如果需要再次单击button2,则需要从其他按钮事件处理程序或其他程序中启用它,以便在启用它(button2)之前有机会从this.Controls集合中删除tbox8和tbox9,以防止应用程序尝试创建它们的其他副本

private void button2_Click(object sender, EventArgs e) {
    button2.Enabled = false;
    TextBox tbox8 = new TextBox();
    tbox8.Name = "textBox8";
    tbox8.Location = new System.Drawing.Point(54 + (0), 55);
    tbox8.Size = new System.Drawing.Size(53, 20);
    this.Controls.Add(tbox8);
    tbox8.BackColor = System.Drawing.SystemColors.InactiveCaption;

    TextBox tbox9 = new TextBox();
    tbox9.Name = "textBox9";
    tbox9.Location = new System.Drawing.Point(54 + (60), 55);
    tbox9.Size = new System.Drawing.Size(53, 20);
    this.Controls.Add(tbox9);
    tbox9.BackColor = System.Drawing.SystemColors.InactiveCaption; }

private void button3_Click(object sender, EventArgs e) {
    double result = 0;
    double.TryParse(tbox8.Text, out result);
    tbox9.Text = (double)(result * 2).ToString(); }

假设结果*2不会导致double的算术溢出,这样的方法应该可以工作。如果在tbox8中输入的值无法解析为双精度,则单击按钮3后在tbox9中显示的结果将为0

因为我没有使用文本框的任何事件,所以我不需要为它们创建处理程序。我还禁用了按钮2被点击后,使它不能再次点击

如果需要再次单击button2,则需要从其他按钮事件处理程序或其他程序中启用它,以便在启用它(button2)之前有机会从this.Controls集合中删除tbox8和tbox9,以防止应用程序尝试创建它们的其他副本

private void button2_Click(object sender, EventArgs e) {
    button2.Enabled = false;
    TextBox tbox8 = new TextBox();
    tbox8.Name = "textBox8";
    tbox8.Location = new System.Drawing.Point(54 + (0), 55);
    tbox8.Size = new System.Drawing.Size(53, 20);
    this.Controls.Add(tbox8);
    tbox8.BackColor = System.Drawing.SystemColors.InactiveCaption;

    TextBox tbox9 = new TextBox();
    tbox9.Name = "textBox9";
    tbox9.Location = new System.Drawing.Point(54 + (60), 55);
    tbox9.Size = new System.Drawing.Size(53, 20);
    this.Controls.Add(tbox9);
    tbox9.BackColor = System.Drawing.SystemColors.InactiveCaption; }

private void button3_Click(object sender, EventArgs e) {
    double result = 0;
    double.TryParse(tbox8.Text, out result);
    tbox9.Text = (double)(result * 2).ToString(); }


把那个都拿走。在
按钮3上单击
,执行
tbox14.Text=Convert.ToDouble(tbox8)*2抱歉,我忘了写这些文本框是在运行时动态创建的,所以我无法访问它们,正如您所指出的,您如何知道哪个文本框将收到结果?这至少是一个静态的吗?@Andre Calil,不知道你的意思,但这里有一个在按钮点击时生成文本框的代码,谢谢,全部删除。在
按钮3上单击
,执行
tbox14.Text=Convert.ToDouble(tbox8)*2抱歉,我忘了写这些文本框是在运行时动态创建的,所以我无法访问它们,正如您所指出的,您如何知道哪个文本框将收到结果?这至少是一个静态的吗?@Andre Calil,不知道你的意思,但这是在点击按钮时生成文本框的代码,谢谢。我在这里假设,自事件处理程序生成以来,表单上的文本框的名称没有更改。我忘了提一下,我所有的文本框都是动态创建的。所以,这很伤人work@AliFolks,为什么这样不行?我的意思是,即使文本框是动态创建的,针对它们的操作也会得到相同的结果。var1=Convert.ToDouble(tbox8.text);在这里,我得到一个错误,说tbox8在当前数据库中不存在context@AliFolks:如果您愿意,发布生成文本框的代码,看看我们可以做些什么来将其转化为答案。我在这里假设,自事件处理程序生成以来,表单上的文本框的名称没有更改。我忘了提到,我所有的文本框都是动态创建的。所以,这很伤人work@AliFolks,为什么这样不行?我的意思是,即使文本框是动态创建的,针对它们的操作也会得到相同的结果。var1=Convert.ToDouble(tbox8.text);在这里,我得到一个错误,说tbox8在当前数据库中不存在context@AliFolks:如果您愿意,发布生成文本框的代码,看看我们能做些什么来将其转化为答案。这是文本框的动态创建,所以我确实需要文本更改。这是文本框的动态创建,所以我确实需要文本更改