WinForms选项卡控件问题

3
我有一个表单,在两种模式下显示。切换模式会完全改变表单的外观,就像您使用标签控件并且每个标签上都有不同布局的控件一样。
如果我可以隐藏标签本身,那么标签控件将是完美的选择。
当然,我可以使用两个面板,编写代码以动态显示和隐藏适当的面板。我尝试过这样做,但我的锚定点一直被搞乱(我认为这是Visual Studio设计器的问题)。
理想情况下,我想使用“向导”控件,它没有标签,可以在设计时为第一页绘制控件,将“PageNumber”属性切换到第二页,然后将控件放置在第二页上。
我认为TabControl有出现无标签的功能,这非常适合创建向导式界面等。
最好的方法是什么,以使我的设计时外观与运行时相似?
目前,我有2个面板,一个直接覆盖另一个,我交替更改每个面板的可见属性,我的自动锚定被VS弄乱了。我可能不得不编写自己的锚定代码,这并不难,但我喜欢设计环境尽可能地反应屏幕运行时的外观。这只是让生活变得更轻松。
我还有Telerik Q3 WinForm控件,如果在该控件集中有替代方案...建议?
4个回答

13

这是可能的。将下面显示的代码粘贴到您的项目中并添加一个新类。编译。从工具箱顶部拖放新控件到您的表单上。它在设计时具有选项卡,因此您可以轻松地在页面之间切换。但在运行时隐藏它们,使用SelectedIndex或SelectedTab属性在您的代码中切换视图。

using System;
using System.Windows.Forms;

class PageControl : TabControl {
  protected override void WndProc(ref Message m) {
    // Hide tabs by trapping the TCM_ADJUSTRECT message
    if (m.Msg == 0x1328 && !DesignMode) m.Result = (IntPtr)1;
    else base.WndProc(ref m);
  }
}

很不错。如果在设计视图中也隐藏它,并通过属性窗口的属性“selectedIndex”控制选项卡,那就更好了。但是当我尝试删除“DesignMode”异常时,我失去了调整大小的能力。 - Chad
唯一的缺点是:如果你将对话框缩小,那些现在不可见的选项卡只会部分可见,你会看到滚动/翻页箭头按钮来选择其中一个选项卡。看起来很奇怪。 - TheBlastOne
设置 MinimumSize 属性。 - Hans Passant
像往常一样,@Hans的答案又是最佳答案,你这家伙怎么知道这些东西的? - Matt Wilko

0

就此而言,我建议您使用SplitContainer,并在需要时将SplitSeparator从左移动到右边...

我不确定我的答案是否有太大价值,但考虑一下,这可能是一个方便的解决方案。

希望这可以帮助到您,


是的,我考虑过这个,但如果我需要第三个视图,它会变得有点丑陋...我需要在分裂器内部再加一个分裂器。 - Chad
使用Telerik,您可以在一个SplitContainer中拥有3个SplitPanels。但是,这可能会变得很丑 :)。 http://www.telerik.com/products/winforms/split-container.aspx - LaGrandMere

0
我一定会使用自定义的“用户控件”来显示每个要展示的“内容”,并且如你所说,编程方式来实现显示/隐藏。对于“锚定”,请将需要放置的内容放在相应的“用户控件”上,并进行相应的锚定处理。然后,在添加到表单时,让“用户控件”具有其自己的锚定属性。控件的调整大小、锚定位置和重新绘制似乎只有在控件可见时才能完成。因此,在第一次启动表单时,请确保将其(用户控件)设置为可见状态,然后根据需要更改其高度 / 宽度以便在表单中进行初始显示,然后从那里开始运行。

0
为了模拟隐藏选项卡,我只需将其删除。问题是你不能轻易地把它恢复,所以我在表单中使用它,我知道它将会被打开一次,然后关闭,而不需要实际使用已删除的选项卡。如果你使用不同的参数再次打开表单,它将打开其他选项卡并删除不需要的选项卡。

但是剩下的选项卡仍然会有一个选项卡。如果有一个没有内置“下一步”按钮的普通向导控件,那将是理想的。 - Chad
是的,选项卡的可见性保持不变。在我的情况下,我有大约7个选项卡,出于不同的原因,我会删除其中一些,因此仍需要选项卡功能。 - MadBoy

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