防止对表单内的某些控件进行选项卡

时间:2015-12-22 20:49:48

标签: c# winforms

我的表单中包含多个UserControls

当按下用户控件内的按钮时,它将打开并添加另一个用户控件 文本框和2个按钮。

一旦打开此用户控件,焦点/光标就会转到文本框。

按TAB键将焦点从一个控件移动到另一个控件,在整个表单中移动。

所以基本上我想避免这种情况。

即,有一个名为XXX的UserControl对象。现在,当我点击"打开编辑"按钮,它会在XXX中打开一个名为YYY的新UserControl对象。

UserControl YYY有一个文本框和2个(保存并取消)按钮。

我想确保标签始终保持焦点 在YYY内,直到单击取消按钮关闭YYY。

我不确定是否有TabStop格式TabStop属性?或者我应该循环其他控件 并将其GET /admin/realms/{realm}/users/{id} 设置为FALSE?

考虑到在不同的类下有许多其他UserControl,它有点乏味。

有没有更简单的方法来实现这一目标?

2 个答案:

答案 0 :(得分:5)

其实你的问题是:

如何在用户控件中保留制表符停止?

您可以在用户控件中覆盖要保留制表位的ProcessTabKey

protected override bool ProcessTabKey(bool forward)
{
    return this.SelectNextControl(this.ActiveControl, true, true, true, true);
}

这样,制表位将保留在您的用户控件中。

答案 1 :(得分:1)

您需要将每个控件的TabStop属性设置为False

你可以这样做:

  1. 通过Designer
  2. 代码(可能在Form_Load事件处理程序中)用于特定控件
  3. 带有的递归函数所有控件。
  4. 天真的递归函数:
    我用VB编写,所以你需要翻译

    Public Sub LoopControls()   '  Assumes this function lives within the scope of a Form
        LoopControls(Me)
    End Sub  
    
    Public Sub LoopControls(ByVal container As Control)
        '
        '  TODO:  Do something with the current control (container)
        '
    
        '
        '  Loop over the current control's inner controls
        '
        If Not Nothing Is container.Controls
            For Each control As Control In container.Controls
                LoopControls(control)
            Next
        End If
    End Sub