Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.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# 在CF.net框架中设置TabIndex_C#_.net_Compact Framework_Tabindex - Fatal编程技术网

C# 在CF.net框架中设置TabIndex

C# 在CF.net框架中设置TabIndex,c#,.net,compact-framework,tabindex,C#,.net,Compact Framework,Tabindex,我有一个有3个面板的表单,创建这些面板是因为在某些时候我需要隐藏/显示某些控件组。直到现在,它工作得很好——也就是说,直到我被要求有一种使用TAB键导航表单的特定方法 首先,我注意到Panel对象中没有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