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:如果您愿意,发布生成文本框的代码,看看我们能做些什么来将其转化为答案。这是文本框的动态创建,所以我确实需要文本更改。这是文本框的动态创建,所以我确实需要文本更改