我在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#的新手并希望得到一些帮助。
提前致谢!
答案 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);