无法从TextChanged事件处理程序引用文本框的Text propery

时间:2012-09-17 16:36:02

标签: c# winforms

我在TextChanged事件处理程序中获取文本框的Text值时遇到问题。

我有以下代码。 (简化的)

public float varfloat;

private void CreateForm()
{
    TextBox textbox1 = new TextBox();
        textbox1.Location = new Point(67, 17);
        textbox1.Text = "12.75";
        textbox1.TextChanged +=new EventHandler(textbox1_TextChanged);
}

private void textbox1_TextChanged(object sender, EventArgs e)
    {
         varfloat = float.Parse(textbox1.Text);
    }

我收到以下错误:'名称textbox1在当前上下文中不存在'。

我可能在某个地方犯了一个愚蠢的错误,但我是C#的新手并希望得到一些帮助。

提前致谢!

4 个答案:

答案 0 :(得分:2)

您已在textBox1中将CreateForm声明为本地变量。该变量仅存在于该方法中。

三个简单的选择:

  • 使用lambda表达式在CreateForm 中创建事件处理程序

    private void CreateForm()
    {
        TextBox textbox1 = new TextBox();
        textbox1.Location = new Point(67, 17);
        textbox1.Text = "12.75";
        textbox1.TextChanged += 
            (sender, args) => varfloat = float.Parse(textbox1.Text);
    }
    
  • sender投射到Control并改为使用:

    private void textbox1_TextChanged(object sender, EventArgs e)
    {
        Control senderControl = (Control) sender;
        varfloat = float.Parse(senderControl.Text);
    }
    
  • textbox1更改为实例变量。如果您想在代码中的任何其他位置使用它,这将非常有意义。

哦,请不要使用公共领域:)

答案 1 :(得分:1)

请改为尝试:

private void textbox1_TextChanged(object sender, EventArgs e)
{
     varfloat = float.Parse((sender as TextBox).Text);
}

答案 2 :(得分:0)

在类级范围而不是函数范围内定义textbox1外侧CreateForm(),以便它可用于textbox1_TextChanged事件。

TextBox textbox1 = new TextBox();

private void CreateForm()
{    
        textbox1.Location = new Point(67, 17);
        textbox1.Text = "12.75";
        textbox1.TextChanged +=new EventHandler(textbox1_TextChanged);
}

private void textbox1_TextChanged(object sender, EventArgs e)
{
     varfloat = float.Parse(textbox1.Text);
}

答案 3 :(得分:0)

您尚未将文本框控件添加到表单中。

可以

完成
TextBox txt = new TextBox();
txt.ID = "textBox1";
txt.Text = "helloo";
form1.Controls.Add(txt);