我在一个winform文本框的TextChanged事件上有一块c#代码。调用的几个空隙附加了消息框,因此操作员知道他们是否有有效数据。不幸的是,这些调用完全被忽略了。我用show()而不是showdialog()来调用有问题的表单,以消除形式为模态。仍然没有肥皂。该事件由条形码扫描仪触发。代码如下:
private void txtScanCode_TextChanged(object sender, EventArgs e)
{
string barCode;
barCode = txtScanCode.Text;
if (txtScanCode.Text.Length == 12)
{
MessageBox.Show(this, "Hey, look!", "A message box!",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
FindScanItem(barCode);
barCode = "";
txtScanCode.SelectionStart = 0;
txtScanCode.SelectionLength = txtScanCode.Text.Length;
}
}
我怀疑它是文本更改和按键的组合,但不确定应该如何正确触发它。
答案 0 :(得分:1)
我刚刚进行了复制/粘贴测试,我认为问题可能出在if
状态。如果我复制超过12个字符并将其粘贴到文本框中,那么'如果'声明没有触发。
这个简单的改变似乎解决了这个问题:
if (textBox1.Text.Length >= 12)
{
MessageBox.Show(this, "Hey, look!", "A message box!",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
// the rest of your code here
// (you may want to do some additional validation
// on the text if it's more than 12 characters)
}
答案 1 :(得分:1)
经过一周半的时间,我得到了答案,经过测试和验证。使用Leave和KeyPress,TaW和BillRuhl走在了正确的轨道上。当那些不起作用时,我终于点击了KeyUp事件。
一点背景。通用键盘楔形USB扫描仪会自动添加一个回车,修剪“\ r \ n”或环境.Newline()不会被删除。经过多次尝试使用不同的组合和按键,我发现应用程序在关闭之前触发了一个表单。与普通键盘输入或切割和粘贴不同,条形码扫描器继续向在事件期间监听它的任何事物发送回车键。我知道。越野车。但是,如果我们开始关注keyup事件,就像这样......
private void txtScanCode_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
e.SuppressKeyPress = true;
barCode = txtScanCode.Text.Trim().ToString();
if (!doDataStuff) //This boolean is instantiated as false
{
if (txtScanCode.Text.Length == 12)
{
doDataStuff = true; //boolean tells the app go run data functions.
MessageBox.Show(this, "Pop up worked!", "Cool!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
getData(barCode); //Data methods performed on the barcode
barCode = "";
txtScanCode.Focus();
txtScanCode.SelectionStart = 0;
txtScanCode.SelectionLength = txtScanCode.Text.Length;
}
}
}
}
...我们只查找一个回车键,验证字符串的长度(在这种情况下,“== 12”对于验证是必不可少的),并使用KeyEventArgs过滤掉Keys.Enter。与一个警告完美配合。 KeyUp实际上在表单级别上工作,因此它也会在其他文本框上触发。在这种情况下,txtScanCode是唯一一个在其后面具有数据绑定函数的函数,因此编写所有验证以检查该控件。
感谢所有人的好评。我想我们曾几次试图弄清谷歌。
答案 2 :(得分:0)
尝试不同的事件......我对离开事件的好运比对TextChanged事件好。所以你的方法看起来像:
private void txtScanCode_Leave(object sender, EventArgs e)
{
string barCode;
barCode = txtScanCode.Text;
if (txtScanCode.Text.Length == 12)
{
MessageBox.Show(this, "Hey, look!", "A message box!",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
FindScanItem(barCode);
barCode = "";
txtScanCode.SelectionStart = 0;
txtScanCode.SelectionLength = txtScanCode.Text.Length;
}
}
不要忘记连接离开事件...
希望有所帮助 比尔
答案 3 :(得分:0)
只需放MessageBox.Show("ble");
,然后放MessageBox.Show("blu);
,"blu"
就会开火。