0

我正在使用以下代码在 Windows 窗体中转到下一个和上一个控件

if (e.KeyCode == Keys.Enter)//Next
{
    this.SelectNextControl(this.ActiveControl, true, true, true, true);
}
if (e.KeyCode == Keys.Back)//Previous
{
    this.SelectNextControl(this.ActiveControl, false, true, true, true);
}

问题在

if (e.KeyCode == Keys.Back)

如果当前控件是 aTextBox并且用户尝试使用退格键键入和删除一个单词,那么这将起作用并将焦点设置到下一个控件。

当文本框有一些值时如何防止此事件?它应该适用于ComboBox其他控件

4

3 回答 3

1

另一个更新,可能不是那么好,但有效。我建议创建一个方法:

public void checkKey(object sender)
{
    KeyEventArgs a = new KeyEventArgs(Keys.Back);
    if (sender.GetType().Name == "TextBox")
    {
        TextBox tb = (TextBox)sender;
        if ((a.KeyCode == Keys.Back && String.IsNullOrWhiteSpace(tb.Text)))
        {
            this.SelectNextControl(this.ActiveControl, false, true, true, true);
        }
    }
}

然后在所有文本框TextChanged事件调用checkKey(sender);

如果需要添加控件,只需要在if条件中添加即可。

您正在使用的事件检查是否按下了Form上的键而不是textbox上的键。

于 2013-07-25T06:40:03.987 回答
0

大多数人使用反向制表符以赢回形式。但如果你仍然想通过后退按钮来做。

这条鳕鱼会帮助你。你永远不会失去你的 char 。

if(e.KeyCode==Keys.Back)
            {
                if(textBox1.Text.Trim().Length==0){
                this.SelectNextControl(this.ActiveControl, false, true, true, true);
                }
            }

我很高兴能帮助你。欢迎您的感谢

于 2013-07-25T06:26:49.300 回答
0

ok 然后先新建一个函数

public TextBoxBackEvent(TextBox tb,Form form){
               if(tb.Text.Trim().Length==0){
                form.SelectNextControl(form, false, true, true, true);
}

现在在您的应用程序的任何地方使用此功能

喜欢

  TextBoxBackEvent(textbox,this);

它会完全符合你的要求

于 2013-07-25T06:42:02.410 回答