C# 文本框更改事件时未触发消息框

C# 文本框更改事件时未触发消息框,c#,winforms,C#,Winforms,我在winform textbox的TextChanged事件上有一块c代码。一些被称为“空白”的空白处都附有MessageBox,以便操作员知道它们是否有有效数据。不幸的是,这些调用被完全跳过。我用show而不是showdialog调用了有问题的表单,以消除表单的模态。还是没有肥皂。该事件由条形码扫描仪触发。代码如下: private void txtScanCode_TextChanged(object sender, EventArgs e) { string barCode;

我在winform textbox的TextChanged事件上有一块c代码。一些被称为“空白”的空白处都附有MessageBox,以便操作员知道它们是否有有效数据。不幸的是,这些调用被完全跳过。我用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;
    }
}

我怀疑这是文本更改和按键的组合,但不确定如何正确触发

尝试另一个事件……我在请假事件中的运气比在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;
 }
}
别忘了把请假活动联系起来

希望有帮助
比尔

我刚刚做了一个复制/粘贴测试,我想问题可能出在你的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)
}

一周半后,我得到了答案,经过测试和验证。TaW和BillRuhl用左键和按键在正确的轨道上。当这些都不起作用时,我终于想到了KeyUp事件

有点背景。通用键盘楔形USB扫描仪会自动添加一个回车符,\r\n该回车符可用于修剪或环境。换行符不会删除。在多次尝试使用不同的组合和按键后,我发现应用程序在关闭表单之前启动了一个表单。条形码扫描器与普通键盘输入或剪切粘贴不同,它会继续向事件期间侦听它的任何对象发送回车键。我知道。婴儿车。但是如果我们在钥匙事件上开火,就像这样

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;
               }
           }
       }
   }
…我们只查找enter键,在本例中验证字符串的长度,==12是验证所必需的,并使用KeyEventArgs过滤掉Keys.enter。只需一个警告就可以完美地工作。KeyUp实际上在表单级别工作,因此它也会在其他文本框上启动。在本例中,txtScanCode是唯一一个具有数据绑定函数的代码,因此编写所有验证都是为了对照该控件进行检查


谢谢大家的来电。我想我们打破了谷歌好几次试图找出它。

只要把MessageBox.Showble;然后是MessageBox.Showblu;blu也会启动。

我不喜欢文本,主要是因为它不可靠。你试过LostFocus什么的吗?所以一旦控制焦点丢失,它就会触发事件。TextChanged事件是否会被触发?您是否在其中设置了断点并验证了“if”语句中的条件为true?@Rufus TextChanged事件确实会触发。它甚至执行数据函数。它只是讨厌MessageBox.Show.不,它不喜欢。您的代码运行良好。它可能是多行的吗?另外:我们没有看到按键事件!向我们展示所有相关代码!嗯,你的代码对我来说很好。不确定“数据函数”是什么意思?this.txtScanCode.Leave+=new System.EventHandlerthis.txtScanCode\u Leave;那没用,但我会好好玩玩的。TaW提到了按键,所以我也可以尝试一下。@BobRuhl见上文。该代码有效,但在扫描条形码时无效。因此,我们可能会看到完全不同的东西。问题是。当我扫描文本框时,更改的事件传递回车。我已尝试剥离System.Environment.NewLine和\r\n,但无效。发生了什么,即使在textbox_Leave事件中,系统也会认为enter键已被按下。因此,当消息框触发时,此enter键在用户看到它之前触发OK按钮。这是一个键盘楔块,为特定的扫描仪编程不是一个选项。