消息框未在文本框更改事件上触发
本文关键字:事件 文本 消息 | 更新日期: 2023-09-27 18:32:47
我在 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;
}
}
我怀疑这是文本更改和按键的组合,但不确定应该如何正确触发它。
一个半星期后,我有了答案,经过测试和验证。TaW和BillRuhl在Leave和KeyPress上走在正确的轨道上。当这些不起作用时,我终于点击了KeyUp事件。
一点背景。通用键盘楔形 USB 扫描仪会自动添加一个回车符,修剪"''r'"或 Environment.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 是唯一一个背后具有数据绑定函数的函数,因此编写所有验证来检查该控件。
谢谢大家的参与。我想我们打破了谷歌几次试图弄清楚。
我刚刚做了一个复制/粘贴测试,我认为问题可能出在您的if
状况上。如果我复制超过 12 个字符并将其粘贴到文本框中,则不会触发"if"语句。
这个简单的更改似乎解决了这种情况:
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)
}
尝试其他事件...我使用 Leave 事件比使用 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;
}
}
不要忘记连接休假活动...
希望有帮助法案
只需输入MessageBox.Show("ble");
然后MessageBox.Show("blu);
,"blu"
就会触发。