2010-12-10 181 views
3

我有一种表单,以两种模式显示。如果您使用的是选项卡控件,并且每个选项卡上的控件布局不同,切换模式完全改变了表单的外观,就像您期望的那样。WinForms制表符控制问题

如果我可以隐藏选项卡本身,选项卡控件将是完美的。

当然,我可以使用两个面板,并在语法上显示和隐藏适当的面板。我试过这个,但是我的锚定不断变得混乱(我认为它是一个Visual Studio设计器错误)。

理想情况下,我想使用“向导”控件,它是无标签的,并且designtime,绘制第一页的控件,将“PageNumber”属性切换到第二页,然后将控件拖放到第二页上。

我以为TabControl具有不带标签的功能,例如,它很适合创建向导式界面。

这样做的最好方法是什么,以便我的设计时间外观模仿运行时?

目前,我有2个面板,一个直接在另一个面板上,每个触发器都有可见的属性,我的自动锚定功能正在让所有的VS都搞砸。我可能不得不求助于编写我自己的存档代码,但这并不困难,但是当设计env尽可能反应屏幕在运行时的外观时,我很喜欢它。它只是让生活更轻松。

我Telerik的Q3的WinForm控件,也是如此,万一有在控制设置一个替代...

建议?

回答

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); 
    } 
} 
+0

令人印象深刻。如果它也隐藏在Design视图中并且该选项卡通过属性窗口属性“selectedIndex”进行控制,那将会很好。但是当我试图去除“DesignMode”异常时,我失去了调整它的能力。 – ChadD 2010-12-10 17:12:45

0

对于它的价值,我会建议你SplitContainer的,并从移动需要的时候左至右SplitSeparator ...

我不知道我的回答将是多大价值,而是要思考的它,这可能是一个方便的解决方案。

希望这有助于

+0

是的,我想到了,但如果我需要第三个视图,这有点丑陋...我需要一个分离器内的分离器。 – ChadD 2010-12-10 12:27:49

+0

随着Telerik你可以有3 SplitPanels只有1 SplitContainer,我认为:http://www.telerik.com/products/winforms/split-container.aspx 但是,它可能会变得很难:) – LaGrandMere 2010-12-10 14:46:55

0

我肯定会使用自定义“用户控制” S各自的每个“内容”的要显示,正如你所说,编程显示/隐藏它们。关于“锚定”,将东西分别放在你想要和锚定的“用户控件”上。然后,让您的“用户控件”在您将其添加到表单时拥有自己的锚定属性。控件的大小调整,锚点重新定位和重新绘制仅在控件可见时才会完成。因此,当您首次启动表单时,请确保您使IT(用户控件)可见,然后根据需要将其初始显示的高度/宽度更改为表单,然后从该表单运行。

0

模仿隐藏标签我只是Remove它。问题是你无法轻易取回它,所以我在表单中使用它,因为我知道它会因为某个特定的原因而打开,之后关闭,而无需实际使用删除的选项卡。如果您使用不同的参数再次打开表单,它将使用其他选项卡打开并删除不需要的表单。