C# 在CF.net框架中设置TabIndex
我有一个有3个面板的表单,创建这些面板是因为在某些时候我需要隐藏/显示某些控件组。直到现在,它工作得很好——也就是说,直到我被要求有一种使用TAB键导航表单的特定方法 首先,我注意到Panel对象中没有TabIndex属性,最重要的是,我不想遵循嵌套的导航算法,我只想设置自己的序列 从我目前在线阅读的内容来看,这在面板上是不可能实现的。我唯一的选择是将表单上的所有控件放在同一个面板中C# 在CF.net框架中设置TabIndex,c#,.net,compact-framework,tabindex,C#,.net,Compact Framework,Tabindex,我有一个有3个面板的表单,创建这些面板是因为在某些时候我需要隐藏/显示某些控件组。直到现在,它工作得很好——也就是说,直到我被要求有一种使用TAB键导航表单的特定方法 首先,我注意到Panel对象中没有TabIndex属性,最重要的是,我不想遵循嵌套的导航算法,我只想设置自己的序列 从我目前在线阅读的内容来看,这在面板上是不可能实现的。我唯一的选择是将表单上的所有控件放在同一个面板中 有什么想法吗?我不想重新安排应用程序,而是开始隐藏和显示单个控件。我想你几乎被困在那里了——我不知道有什么直接的
有什么想法吗?我不想重新安排应用程序,而是开始隐藏和显示单个控件。我想你几乎被困在那里了——我不知道有什么直接的方法可以避免嵌套导航 但是,我想说的是,显示/隐藏控件组并没有什么大不了的:
private void SetPrimaryControlVisibility(bool visible)
{
ctrlA.Visible = visible;
ctrlB.Visible = visible;
ctrlF.Visible = visible;
}
private void SetSecondaryControlVisibility(bool visible)
{
ctrlC.Visible = visible;
ctrlE.Visible = visible;
ctrlG.Visible = visible;
}
这需要更多的代码编写——但这花了我20秒。如果它们都在表单表面上,您可以使用选项卡索引
虽然现在我想起来了,他们自己的小组有什么问题?如果您使用面板来显示/隐藏,那么您无论如何都不会切换到其他面板
另一个选择是编写关键事件处理程序,但我不想这样做——这将是一个无法维护的大烂摊子。我想你几乎被困在那里了——我不知道有什么直接的方法可以避免嵌套导航 但是,我想说的是,显示/隐藏控件组并没有什么大不了的:
private void SetPrimaryControlVisibility(bool visible)
{
ctrlA.Visible = visible;
ctrlB.Visible = visible;
ctrlF.Visible = visible;
}
private void SetSecondaryControlVisibility(bool visible)
{
ctrlC.Visible = visible;
ctrlE.Visible = visible;
ctrlG.Visible = visible;
}
这需要更多的代码编写——但这花了我20秒。如果它们都在表单表面上,您可以使用选项卡索引
虽然现在我想起来了,他们自己的小组有什么问题?如果您使用面板来显示/隐藏,那么您无论如何都不会切换到其他面板
另一种选择是编写键事件处理程序,但我不想这样做——这将是一个无法维护的巨大混乱。按TAB键将焦点移动到ControlCollection中的下一个控件。由于焦点始终位于面板内的控件中,而不在面板本身中,您怎么能期望面板支持选项卡索引
我建议你再想想你想做什么。当特定面板可见时,选项卡应在其中的控件周围导航。TAB在下一个面板中移动您是没有意义的。这通常是通过按钮或其他控件完成的。用户希望选项卡移动焦点而不执行操作。此外,如果您想让TAB在面板上移动,则需要将所有控件的TAB Stop属性设置为false。按TAB键将焦点移动到ControlCollection中的下一个控件。由于焦点始终位于面板内的控件中,而不在面板本身中,您怎么能期望面板支持选项卡索引
我建议你再想想你想做什么。当特定面板可见时,选项卡应在其中的控件周围导航。TAB在下一个面板中移动您是没有意义的。这通常是通过按钮或其他控件完成的。用户希望选项卡移动焦点而不执行操作。此外,如果您想让TAB在面板中移动,则需要将所有控件的TAB Stop属性设置为false。我也遇到了同样的问题。我的解决方案是将所有控件放在表单的子面板中。net算法的制表是使用TabIndex在“当前”容器内进行制表。如果容器中的任何tabindex相同,则z顺序中的第一个将是第一个,以此类推 一旦进入容器(表单就是容器),除容器(面板)之外的所有控件都会首先被标记为。离开最后一个非容器控件时,面板将递归到 因此,如果所有控件都放置在同一级别的容器/面板中,则您的选项卡将按预期完成 示例问题: Form control1 Tabindex=1 panel1 control2 Tabindex=2 control3 Tabindex=2 panel2 control4 Tabindex=4 control5 Tabindex=5 control6 Tabindex=6 类型 control1 Tabindex=1 小组1 control2 Tabindex=2 control3 Tabindex=2 小组2 control4 Tabindex=4 control5 Tabindex=5 control6 Tabindex=6 选项卡将按以下顺序进行(不是您期望的顺序): 控制1
对照组6我也有同样的问题。我的解决方案是将所有控件放在表单的子面板中。net算法的制表是使用TabIndex在“当前”容器内进行制表。如果容器中的任何tabindex相同,则z顺序中的第一个将是第一个,以此类推 一旦进入容器(表单就是容器),除容器(面板)之外的所有控件都会首先被标记为。离开最后一个非容器控件时,面板将递归到 因此,如果所有控件都放置在同一级别的容器/面板中,则您的选项卡将按预期完成 示例问题: Form control1 Tabindex=1 panel1 control2 Tabindex=2 control3 Tabindex=2 panel2 control4 Tabindex=4 control5 Tabindex=5 control6 Tabindex=6 类型 control1 Tabindex=1 小组1 control2 Tabindex=2 control3 Tabindex=2 小组2 control4 Tabindex=4 control5 Tabindex=5 control6 Tabindex=6 选项卡将按以下顺序进行(不是您期望的顺序): 控制1 控制6