代码之家  ›  专栏  ›  技术社区  ›  Luca

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

  •  12
  • Luca  · 技术社区  · 14 年前

    我需要处理多个面板,包含各种数据掩码。每个面板应使用TreeView控件可见。

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

    实际上,这并不是很容易,尤其是在ui设计器中,因为当我添加一个全新的面板时,我必须调整每个面板的大小,然后设计它…

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

    另一个解决方案是ipotetic的“stackpanelcontrol”,其中的面板使用堆栈进行排列,但我在任何地方都找不到。

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

    2 回复  |  直到 14 年前
        1
  •  21
  •   Hans Passant    14 年前

    你需要一点win32 api的魔力。tab控件发送tcm_adjustrect消息,允许应用程序调整tab大小。向项目中添加一个新类并粘贴下面显示的代码。编译。将新控件从工具箱顶部放到窗体上。

    您将在设计时获得选项卡,以便在页面之间轻松切换。选项卡在运行时隐藏,请使用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);
      }
    }
    
        2
  •  1
  •   Geno Chen    6 年前

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

    对于上述情况, 您需要设置tabcontrol的以下属性。

    tabControl.Multiline = true;
    tabControl.Appearance = TabAppearance.Buttons;
    tabControl.ItemSize = new System.Drawing.Size(0, 1);
    tabControl.SizeMode = TabSizeMode.Fixed;
    tabControl.TabStop = false;