在Visual Studio 2010中控制选项卡顺序

4
有没有一种简单的方法可以在Visual Studio表单设计器中更改复杂表单上控件的选项卡顺序?
我知道我可以选择选项卡顺序模式,并显示所有控件及其选项卡索引,但是在复杂表单中添加新控件并不得不重新选择表单上的每个控件来设置新的选项卡顺序非常麻烦。我经常发现我错过了一个控件,所以不得不重新开始。
我在MSDN上读到,至少应该可以Ctrl-Click之前的控件以启动新的控件重新排序,然后单击之后的每个控件以设置新的选项卡顺序,但我无法使其正常工作。 Ctrl-Click之前的控件只会将其设置为选项卡索引0,因此它成为整个表单上的新第一个控件。
我来自Delphi背景,在Delphi中编辑控件选项卡顺序时,您会看到一个对话框,其中列出了表单上的所有控件,您可以从列表中选择一个控件并将其上移或下移。对于交换选项卡顺序或在表单中间添加新控件这样的简单更改,这更容易。
也许我错过了什么,它可能很容易做到。如果在Visual Studio中不可用,则是否有插件模拟Delphi功能。
谢谢 布赖恩

您是否可以创建用户控件,作为表单中更大的组件,更容易进行排列? - Gert Arnold
1
使用面板、GroupBox和UserControl来分割复杂的布局。在用户使用时很友好,在编辑时也很友好,而且在Tab顺序视图中非常友好。 - Hans Passant
是的,这可能是更好的方法,但不幸的是,这是一个很大的项目,在我参与之前已经存在了一段时间,有很多表格没有进行分组处理。改变所有这些需要大量的工作。 - dub.survivor
我知道这是一个有点老的问题..但你可以尝试这个插件..免责声明 - 我是这个插件的作者。http://codecanyon.net/item/winforms-tab-index-addin/4567358?WT.ac=category_thumb&WT.seg_1=category_thumb&WT.z_author=Rifky - Rifky
3个回答

3
如果您添加了一个新控件并赋予它一个已使用的选项卡顺序值,Visual Studio将自动替换其余部分。两个控件将具有相同的选项卡顺序,但它们将正常工作。

尝试了一下,我认为这可能是目前最容易做的事情。我有点担心两个控件具有相同的选项卡顺序会发生冲突,但似乎可以正常工作。谢谢。 - dub.survivor
我很高兴能帮助到你。如果需要其他帮助,请随时告诉我。 - Fady Harfouch
2
我刚遇到了这个问题,而且Visual Studio 2010不会重新编号其余部分。我知道微软以破坏正常工作的东西而闻名,但这是一个新低点 - 这个功能从VB2时代就一直在工作,现在我们不能再依赖它了。 :-( - user804018

3

如果您有太多的控件需要改变选项卡顺序,最简单的方法是在文本模式下打开PROJECT.RC文件并找到配置对话框的位置...例如:

IDD_MESSAGE_LIST DIALOG 0, 0, 197, 162
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Message List"
FONT 8, "MS Sans Serif"
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,85,140,50,14
    PUSHBUTTON      "Cancel",IDCANCEL,140,140,50,14
    CONTROL         "List1",IDC_MESSAGE_LIST,"SysListView32",WS_BORDER | WS_GROUP,5,5,165,120
    CONTROL         "",IDC_LINE,"Static",SS_ETCHEDHORZ,5,130,190,1
    CONTROL         "",IDC_CHECK_ALL,"Static",SS_BLACKFRAME | NOT WS_VISIBLE,175,5,5,5
    CONTROL         "Tree1",IDC_MESSAGE_TREE,"SysTreeView32",TVS_HASBUTTONS | WS_BORDER 
END

BEGINEND 之间的控件按照它们的 TAB ORDER 进行排序。只需移动对应的行到想要的 TAB ORDER 的位置。将前两行交换,就可以将 Cancel 按钮设置为 TAB ORDER 1。


我想知道为什么微软不直接在控件的属性页中显示控件的行索引... - Andreas

0

由于您表示重新排列表单不是一个选项,因此您可以考虑使用来自CodeProject的老实可靠工具:Windows Forms的自动运行时选项卡顺序管理。它有点过时(例如没有强类型泛型集合),但它运行得非常好。

该项目中的TabOrderManager.cs可以单独编译,您(我)不需要所有附带的IExtenderProvider和测试项目。

如果需要更改表单,则只需添加新控件,并在InitializeComponent();下方添加调用即可。

new TabOrderManager(this).SetTabOrder(TabOrderManager.TabScheme.DownFirst);

希望它适合你。


谢谢提供这个链接。根据我的需求,我会考虑这个选项作为长期解决方案。目前,对于我紧急需求的最佳解决方案是手动设置新控件的选项卡索引。 - dub.survivor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接