【发布时间】:2012-09-20 01:34:13
【问题描述】:
我正在检查文本框的键码,并且我希望在用户按下 Enter 时执行某个任务。
它一直运行良好,但我现在尝试执行的任务通常是使用鼠标单击完成的。因此,在该任务的确定(FolderBrowserDialog)上,它一直在调用对话框控件。
奇怪的是,即使调试器显示我进入 if 分支,因为 e 它显示 {KeyData = LButton|MButton|Back},但 KeyValue 仍然是 13...
我认为可能是文本框记住了它的最后一个条目......真的吗?
在我的故障排除中,我添加了一个布尔变量,所以我只在它为 true 时进入 FolderBrowser,我尝试在浏览后从文本框中添加和删除一个空格,甚至清除文本框...每次尝试似乎让事情变得更糟。
似乎我处于一个准无限循环中 - 但它会在很多“ok”之后消失,并且逐步通过,我发现对于我在文本框中输入的每个字母,我花费 4 到 5 CheckKeys 中的轮次。我不明白为什么......或者如何解决它。
我添加了一个“e.Handled”,这对我没有好处。
代码如下:
private void txtDir_TextChanged(object sender, EventArgs e)
{
this.txtDir.KeyUp += new System.Windows.Forms.KeyEventHandler(CheckKeys);
}
private void CheckKeys(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
if (sender == txtDir && txtDir.Text != "" && System.IO.Directory.Exists(txtDir.Text))
{
btnBrowse_Click(this, e);
}
}
}
为什么我要检查这么多次?我可以添加不同的测试吗?难道我做错了什么 ? (没有设置为默认操作,对于表单或文本框...)
谢谢。
【问题讨论】:
标签: c# textbox event-handling keyevent