【发布时间】:2014-07-16 00:26:03
【问题描述】:
我已经有一段时间没有接触过 C#,正试图帮助我的一个新程序员朋友,结果被以下内容完全难住了:
private void textBox1_TextChanged(object sender, EventArgs e)
{
activateEnterButton();
TextBox t = (TextBox)sender;
string theText = t.Text;
MessageBox.Show("text: " +theText);
}
private void activateEnterButton()
{
bool allGood = true;
foreach (Control control in Controls )
{
if (control is TextBox)
{
string test = ((TextBox)control).Text;
if (test.Length == 0)
{
MessageBox.Show("text: " +test);
allGood = false;
break;
}
}
}
btnEnter.Enabled = allGood;
}
我们的目标非常简单:我们有 5 个文本框,每个文本框都需要在其中包含一些文本,然后才能启用按钮。当每个都有文本时,就会启用按钮。
当我在调试时遍历代码时,一切都正常,但无论我在文本框中输入多少文本,activateEnterButton 都不会知道它的存在。这两个 MessageBox 也显示不同的输出:activateEnterButton 中的那个永远不会有任何输出,而事件处理程序中的那个总是有。
任何帮助将不胜感激。谢谢。
我已经删除了对 activateEnterButton() 的调用,我已经将该代码的内容放入 textBox5 的事件处理程序中,但该按钮仍未启用。
我接受的答案没有给我想要的功能(在 textbox5 中输入数据会使按钮处于活动状态)下面的代码给了我想要的所有功能。最后,我的错误的原因是因为A)foreach从最后一个控件迭代到第一个,B)我在表单上的最后一个文本框控件是一个只读文本框控件,它的文本总是“”,因此我是总是被我早期的代码抛弃。无论如何,新代码:
private void checkMe()
{
bool allGood = true;
foreach (Control control in Controls)
{
// Make sure the ReadOnly textbox doesn't cause false
if (control.Name.Equals("ReadOnlyTextBox"))
{
// MessageBox.Show("hidden textbox: " + ((TextBox)control).Text);
allGood = true;
}
else if (control is TextBox)
{
string test = ((TextBox)control).Text;
//MessageBox.Show("test: " + test);
if (test.Length < 1)
{
allGood = false;
// MessageBox.Show("All textboxes need input");
break;
}
else
{
allGood = true;
}
}
}
btnEnter.Enabled = allGood;
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
checkMe();
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
checkMe();
}
private void textBox3_TextChanged(object sender, EventArgs e)
{
checkMe();
}
private void textBox4_TextChanged(object sender, EventArgs e)
{
checkMe();
}
private void textBox5_TextChanged(object sender, EventArgs e)
{
checkMe();
}
【问题讨论】:
-
我知道这听起来很疯狂,但是您是否尝试过设置 btnEnter.Enabled = true,而不是使用布尔变量?
-
雪,当我在调试嵌套的'if'时遍历代码时,字符串的长度总是为零;因此永远不会进入代码的那部分。
-
你看过控件的名字了吗?您可能甚至找不到控件。如果文本框在面板上,您需要查看面板的控件。
-
Paq,没有面板。只有 5 个标签、5 个文本框、3 个按钮和一个……下面的大 ReadOnly 文本框……我想我不想重复它,但这并不能解决我的第一个文本框问题。
-
这是为了验证,当所有 5 个文本框都有文本时,按钮将执行一些工作然后退出?
标签: c# winforms events textchanged