gpt4 book ai didi

c# - 消息框未触发文本框更改事件

转载 作者:行者123 更新时间:2023-11-30 22:01:59 26 4
gpt4 key购买 nike

我在 winform 文本框的 TextChanged 事件上有一段 C# 代码。被称为 voids 的几个有附加到它们的消息框,因此运算符(operator)知道它们是否有有效数据。不幸的是,这些调用被完全跳过。我用 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\n"或 Environment.Newline() 不会被删除。在多次尝试使用不同的组合和按键后,我发现该应用程序在关闭之前触发了一个表单。与普通的键盘输入或剪切和粘贴不同,条形码扫描器会继续向事件期间监听它的任何对象发送回车键。我知道。 buggy 。但是如果我们改为触发 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 是唯一一个在其背后具有数据绑定(bind)函数的函数,因此所有验证都是为了检查该控件而编写的。

感谢大家的参与。我想我们在试图解决这个问题时曾多次破坏谷歌。

关于c# - 消息框未触发文本框更改事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27257338/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com