C#文本框访问

时间:2012-08-22 17:05:22

标签: c# textbox

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

     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(); 
        }      
    }

3 个答案:

答案 0 :(得分:3)

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

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

然而,这仍然存在问题。当用户多次点击button2时会发生什么?

答案 1 :(得分:0)

假设tbox8(尝试使用有意义的名称BTW)是应该输入文本的那个,并且tbox14是您期望输出的位置,为什么只在tbox14的TextChanged事件中设置tbox2变量?您的代码可能无法正常工作,因为tbox2始终为null,因为您永远不会为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 :(得分:0)

这样的事情应该有效,假设结果* 2不会导致double的算术溢出。如果输入到tbox8的值无法解析为double,则单击button3后tbox9中显示的结果将为0。

由于我没有使用TextBoxes的任何事件,因此我不需要为它们创建处理程序。我点击它后也禁用了button2,因此无法再次点击它。

如果你需要再次点击button2,你需要从另一个按钮事件处理程序或其他东西启用它,这样你就有机会在启用它之前从this.Controls集合中删除tbox8和tbox9(button2)以防止该应用程序试图创建它们的其他副本。

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(); }