Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过按tab键防止用户退出“UserControl”_C#_User Controls_Tabstop - Fatal编程技术网

C# 通过按tab键防止用户退出“UserControl”

C# 通过按tab键防止用户退出“UserControl”,c#,user-controls,tabstop,C#,User Controls,Tabstop,我有一个UserControl,它包含一个按钮和一个文本框。用户应填写文本框并单击按钮-以便将数据发送到表单并隐藏usercontrol,或按文本框上的Escape-以便表单知道用户已取消进度 问题在于,当用户按下文本框上的tab键时,usercontrol会离开(并且在离开后隐藏——这是由于在离开时隐藏usercontrol的策略),因此不会向表单发送数据,也不会取消进度 所有用户控件、文本框和其中的按钮都将其TabStop设置为false,但用户仍可以按tab返回表单 如何防止此userco

我有一个
UserControl
,它包含一个按钮和一个文本框。用户应填写文本框并单击按钮-以便将数据发送到表单并隐藏usercontrol,或按文本框上的
Escape
-以便表单知道用户已取消进度

问题在于,当用户按下文本框上的tab键时,usercontrol会离开(并且在离开后隐藏——这是由于在离开时隐藏usercontrol的策略),因此不会向表单发送数据,也不会取消进度

所有用户控件、文本框和其中的按钮都将其
TabStop
设置为false,但用户仍可以按tab返回表单


如何防止此usercontrol上的选项卡功能?我想制定一条规则:单击按钮或按Escape键,无制表符失控,就是这样。

将表单中所有其他控件的
TabStop
设置为
false
,以便在制表时焦点保持在那里。否则,在OnKeyDown或OnKeyPress事件中吞下按键。单选tab键并防止其被进一步处理:。

使用用户控件中的验证方法:

public partial class UserControl1 : UserControl {

  public UserControl1() {
    InitializeComponent();
  }

  protected override void OnValidating(CancelEventArgs e) {
    e.Cancel = (textBox1.Text.Trim() == String.Empty);
    base.OnValidating(e);
  }
}

这是非常糟糕的UI设计。您不应该阻止用户以熟悉的方式使用键盘。你应该重新思考如何处理输入。我刚刚在回答中发布了一个链接,其中有一个例子,说明了如何几乎完全满足你的需要。@xxbbcc:我同意,这些事情最好按预期进行,甚至充分利用。一个有缺陷的人可能会在使用远离用户界面指南的软件时遇到巨大的麻烦。不过,他还是想要一个答案。谁知道他为什么需要这个?@xxbbcc我知道这是一种不可接受的方式,但不幸的是,我的客户是一家为实际年龄较大和传统的人开发应用程序的公司,因此他们想要自己的做事方式:)谢谢你的回答,但我之前已经测试过了,这种方法的问题是,您根本无法使用选项卡。是否有其他方法可以将tab键捕获到用户控件中?是的,请看我发布的链接中的示例。将事件处理程序仅附加到文本框并正确过滤它。它不应该干扰表单上的任何其他内容。