【问题标题】:Control Tab Order in Visual Studio 2010Visual Studio 2010 中的控制选项卡顺序
【发布时间】:2011-10-10 20:46:02
【问题描述】:

是否有一种简单的方法可以在 Visual Studio 表单设计器中更改复杂表单上控件的 Tab 键顺序。

我知道我可以选择 Tab Order 模式,它会向我显示所有控件及其选项卡索引,但是在复杂表单的中间添加新控件并且必须重新选择每个控件实在是太痛苦了再次表单以设置新的标签顺序。我经常发现我不小心错过了一个控制,所以必须从头再来。

我在 MSDN 上读到,至少应该可以在我想要开始新控件重新排序之前的控件上按 Ctrl 键单击,然后单击之后的每个控件以设置新的选项卡顺序,但我不能让它工作。按住 Ctrl 键单击前一个控件只会将该控件设置为 Tab Index 0,从而成为整个表单上新的第一个控件。

我来自 delphi 背景,在 delphi 中编辑控件选项卡顺序时,您会看到一个对话框,其中显示了表单上所有控件的列表,您可以从列表中选择一个控件并在列表中向上或向下移动它。对于简单的更改(例如交换 Tab 键顺序或在表单中间添加新控件)要容易得多。 也许我错过了一些东西,并且可以轻松地做到这一点。如果在 Visual Studio 中不可用,是否有一个模仿 delphi 功能的插件。

问候 布赖恩

【问题讨论】:

  • 您能否创建用户控件,作为表单中更易于排列的更大组件?
  • 使用面板、组框和用户控件对复杂的布局进行分区。对用户很好,在编辑时很好,在 Tab Order 视图中也很好。
  • 是的,这可能是更好的方法,但不幸的是,这是一个大项目,在我参与许多没有分组优势的表格之前已经存在了一段时间.改变所有这些需要做很多工作。
  • 我知道这是一个有点老的问题.. 但你可以试试这个插件.. 免责声明 - 我是这个插件的作者。 codecanyon.net/item/winforms-tab-index-addin/…

标签: winforms visual-studio-2010 tab-ordering


【解决方案1】:

如果您添加一个新控件并为其指定一个使用的 Tab 键顺序值,Visual Studio 将自动替换其余控件。两个控件的 Tab 键顺序相同,但可以正常工作。

【讨论】:

  • 试过了,我认为这可能是现在更容易做的事情。我有点担心具有相同标签顺序的两个控件的冲突,但它似乎工作正常。谢谢。
  • 很高兴能帮到你。如果需要任何其他帮助,请告诉我。
  • 我刚遇到这个问题,Visual Studio 2010 不会重新编号其余的。我知道 MS 以打破有效的东西而闻名,但这是一个新的低点 - 这从 VB2 开始就一直有效,现在我们不能再依赖它了。 :-(
【解决方案2】:

如果您有太多控制权,最简单的方法是更改​​您的标签顺序,只需以文本模式打开您的 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 顺序排列。只需移动与您想要 TAB ORDER 的位置相对应的行。只需交换前两行,它将是取消按钮作为标签顺序 1。

【讨论】:

  • 我想知道为什么微软不简单地在控件的属性页中显示控件的行索引...
【解决方案3】:

正如您所指出的,重新排列表格不是一种选择,您可以考虑使用 CodeProject 中的老忠实用户:Automatic Runtime Tab Order Management for Windows Forms。它有点过时(例如没有强类型的泛型集合),但效果很好。

项目中的TabOrderManager.cs可以自己编译,你(我)不需要同伴IExtenderProvider和测试项目的所有工具。

如果表单需要更改,您可以添加新控件并在 InitializeComponent(); 下方添加类似调用

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

希望它适合你。

【讨论】:

  • 感谢您提供此链接。我将根据我的需要考虑这个选项以获得更长期的解决方案。目前,满足我当前需求的最佳解决方案就是在我的新控件上手动设置标签索引。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-06
  • 2015-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多