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

时间:2014-12-02 19:26:38

标签: c# winforms

我在一个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;
    }
}

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

4 个答案:

答案 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"就会开火。