隐藏TabControl按钮以管理堆叠的Panel控件

Luc*_*uca 13 c# tabcontrol stackpanel winforms

我需要处理多个面板,包含各种数据掩码.使用TreeView控件可以看到每个面板.

此时,我手动处理面板可见性,方法是将所选面板可见并将其置于顶部.

实际上这并不是很容易,特别是在UI设计师中,因为当我添加一个全新的面板时,我必须调整每个面板的大小,然后设计它......

一个好的解决方案是使用TabControl,每个面板都包含在TabPage中.但是我找不到任何隐藏TabControl按钮的方法,因为我已经有了一个用于选择项目的TreeView.

另一种解决方案是ipotethic"StackPanelControl",其中Panel使用堆栈排列,但我无法在任何地方找到它.

处理这种UI的最佳解决方案是什么?

Han*_*ant 23

你需要一点点Win32 API魔法.选项卡控件发送TCM_ADJUSTRECT消息以允许应用程序调整选项卡大小.在项目中添加一个新类并粘贴下面显示的代码.编译.将新控件从工具箱顶部拖放到表单上.

您将在设计时获得标签,以便您可以轻松地在页面之间切换.选项卡在运行时隐藏,使用SelectedIndex或SelectedTab属性在"视图"之间切换.

using System;
using System.Windows.Forms;

class StackPanel : 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);
  }
}
Run Code Online (Sandbox Code Playgroud)