gpt4 book ai didi

c# - 好奇的用户在应用程序处于后台进程时按键,如何忽略这种类型的额外按键

转载 作者:行者123 更新时间:2023-11-30 19:43:16 25 4
gpt4 key购买 nike

我在 C# win 表单应用程序 4.0 中工作,在表单上,​​我在每个文本框上使用 3 个文本框,当用户输入“Tab”键时,焦点跳转到下一个文本框。

现在在验证事件的第一个文本框中我添加了一些代码来检查数据有效性,它连接到数据库服务器并花费几纳秒的时间,同时用户按下更多的“Tab”键,所以这就是我的注意力转移的原因在第 3 个或第 4 个文本框上,它没有跳到第二个文本框上。

请指导我如何解决这个问题。如何忽略此击键。

我需要一个解决方案,在不执行验证事件之前,用户界面将被暂停。

最佳答案

首先,没有理由发送TAB键。只需在您想要获得焦点的文本框上设置 Focus

您想要做的是听取 OnKeyDown 以获取您希望忽略回车键时所关注的文本框或控件。通过将 e.Handled 设置为 true,按键将被忽略。

private void textBox_KeyDown(object sender, KeyEventArgs e)
{
if (bIgnoreInput)
e.Handled = true;
}

编辑:

我建议按下按钮来触发验证,而不是仅在文本更改时触发(如果这不是您正在做的,因为它不是很清楚)。这样您就可以处理验证并提供用户反馈(例如进度条或等待动画)。

如果您根本不需要任何输入,请将文本框上的 Enabled 设置为 false,直到您完成对代码的处理。当控件未启用时,不会触发任何事件。请务必同时检查 InvokeRequiredInvoke(如果是)。

void ValidateInput()
{
SetisValidatingState(true);

System.Threading.Thread workThread = new System.Threading.Thread(delegate()
{
////
// Validate here
////
SetisValidatingState(false);
});
workThread.Start();
}


delegate void SetisValidatingStateDelegate(bool state);
void SetisValidatingState(bool state)
{
if (InvokeRequired)
{
Invoke(new SetisValidatingStateDelegate(SetisValidatingState), new object[] { state });
return;
}

textBox1.AcceptsTabs = textBox2.AcceptsTabs = textBox3.AcceptsTabs = textBox4.AcceptsTabs = !state; // Disable tab while validating = true
progressBar.visible = state; // show progress while validating = true
}

关于c# - 好奇的用户在应用程序处于后台进程时按键,如何忽略这种类型的额外按键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15616007/

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