消息框未在文本框更改事件上触发

本文关键字:事件 文本 消息 | 更新日期: 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"就会触发。