防止在窗体内的某些控件上进行选项卡式切换
本文关键字:选项 行选 控件 窗体 | 更新日期: 2023-09-27 18:27:50
我有一个包含多个UserControls
的表单。
当按下用户控件内的按钮时,它将打开并添加另一个包含文本框和2个按钮。
一旦打开此用户控件,焦点/光标就会转到文本框。
按下TAB按钮可以将焦点从一个控件转移到另一个控件,从而在整个窗体中移动
所以基本上我想避免这种情况。
即存在一个名为XXX的UserControl
对象。现在,当我单击其中的"打开编辑"按钮时,它会在XXX中打开一个名为YYY的新UserControl
对象。
UserControl
YYY有一个文本框和2个(保存和取消)按钮。
我想确保选项卡始终保持焦点在YYY中,直到单击"取消"按钮关闭YYY
我不确定是否存在窗体范围的TabStop
属性?或者我应该循环浏览其他控件吗并将其TabStop
设置为FALSE?
考虑到在不同的类下还有许多其他UserControls,这有点乏味。
有没有更简单的方法来实现这一点?
实际上你的问题是:
如何在用户控件中保留制表位
您可以覆盖用户控件中要使选项卡停止的ProcessTabKey
。
protected override bool ProcessTabKey(bool forward)
{
return this.SelectNextControl(this.ActiveControl, true, true, true, true);
}
这样,制表位将保留在用户控件中。
您需要将每个控件的TabStop
属性设置为False
。
你可以这样做:
- 通过设计器
- 带有特定控件的代码(可能在
Form_Load
事件处理程序中) - 对于大多数所有控件都有递归函数
天真递归函数:
我是用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