【问题标题】:Move dialog controls into tabs?将对话框控件移动到选项卡中?
【发布时间】:2016-02-15 02:52:19
【问题描述】:

我有一个包含多个控件的对话框。接下来,我添加了一个相当庞大的 3rd 方网格控件。看起来不错,但是屏幕空间不够。一种理想的选择是有 2 个选项卡,一个带有现有控件,另一个用于保存网格。

看起来这种“制表符”方法需要完全重写代码。有没有更好的方法来做到这一点?当您想将 GUI 控件移动到您知道的选项卡中时,是否有任何具体问题?

【问题讨论】:

  • 可以发截图吗?
  • 请添加标签指示平台(Linux、mac、iOs、win)和窗口技术(x-windows、wpf 等)
  • 遗憾的是我无法发布屏幕截图。

标签: c++ windows visual-studio-2010 user-interface mfc


【解决方案1】:

如果您选择选项卡式对话框,请查看此http://hallofshame.gp.co.at/index.php?file=tabs.htm&mode=original 以避免最琐碎的问题:

  • 您应避免将对话框控件(例如确定和取消)按钮放在选项卡上,因为它们适用于整个对话框而不是选定的选项卡

  • 在对话框中设置选项卡被认为是一个坏主意,因为单击“确定”时用户无法看到她的所有输入。例如,用户在 tab1 上更改了某些内容,单击 tab2 并单击 OK - 现在用户的印象是她没有更改任何内容(在 tab2 上),但按 OK 仍然会应用他的更改。当然,有时选项卡是不可避免的,但如果您可以避免在模态对话框中使用它们,请避免。一个不好的例子是http://hallofshame.gp.co.at/find95.htm,其中所有搜索参数都在多个视觉上不相关的选项卡上输入。

  • 选项卡隐喻适用于多个文档,而不适用于多个输入。 https://en.wikipedia.org/wiki/Tab_(GUI)

我不想在这里使用标签。你可以让对话框更大,你可以让网格更小,你可以使用布局来让用户放大整个对话框并从网格中看到更多,你可以有拆分器让用户自定义 GUI。

(我发现很多时候使用 GUI 设计器是个坏主意,例如 winforms 设计器。最初布局控件很有帮助。但是从其他角度来看,这确实是一个障碍,例如隔离代码(和将其放到另一个选项卡中),并继承和扩展 gui 片段。简而言之,您将放弃 OOP 的所有灵活性和功能,而转而采用一种更快的方式将小部件扔到您的表单中。

如果您在代码中有现有的表单,您可以用它创建一个类,并为网格内容创建另一个类。然后重构您的表单以拥有一个选项卡,并在第一个选项卡上放置您的第一个类的实例,并在第二个选项卡上放置您的网格内容的实例。

用代码编写 GUI 并不一定很难,一旦你可以用一些 OOP 隐藏实际 gui 框架的复杂性。如果你想看一个例子,请告诉我。)

【讨论】:

  • 感谢警告。这里不会有这样的问题,第二个标签以网格的形式显示结果,没有输入。
  • 嗯,我只是在猜测您的用例。如果网格是仅输出的,您可以考虑在单独的对话框中“作为输出”打开它。或者,如果它是一种搜索参数 - 搜索结果,那么您可以考虑在搜索完成后使显示输入字段的面板可以隐藏(并为网格提供更大的屏幕空间)。使用显示/隐藏按钮让用户再次打开搜索详细信息字段。您还可以使用渐进式披露来限制可见的输入字段。
【解决方案2】:

不可能这么简单,但是如果你使用的是winforms设计器,为什么不能直接剪切控件,放入tab控件,然后粘贴控件呢?如果您遇到代码丢失与处理程序的连线的问题,您始终可以先将部分源代码复制到记事本中,然后在屏幕上移动控件后将它们粘贴回来。

您也可以尝试拖放到选项卡控件。只需在屏幕一角使用 2 个选项卡使其变小。当您拖入时,它会保留您放下时的位置。一个所有控件都在里面,展开它。

这样的事情可以与 winforms+c# 一起使用...不过我不知道您使用的是什么屏幕设计编辑器或 Gui 技术。我什至不确定平台。显然,如果不是 Windows,那我就离题了……

【讨论】:

  • 我使用的是 Visual Studio 2010。
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多