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