我想让tabControl更智能一些,以节省一些屏幕空间:如果只有一个标签,则不显示标题页,如果有两个或更多标签,则显示标题标题。
我知道您可以完全按照How do I create a TabControl with no tab headers?的建议隐藏标签页眉。这种方法的问题是,一旦隐藏,我就无法再显示标签页眉。或者我错过了什么?
答案 0 :(得分:5)
归功于实际came up with the idea的人:
using System;
using System.ComponentModel;
using System.Windows.Forms;
public class WizardPages : TabControl {
private bool tabsVisible;
[DefaultValue(false)]
public bool TabsVisible {
get { return tabsVisible; }
set {
if (tabsVisible == value) return;
tabsVisible = value;
RecreateHandle();
}
}
protected override void WndProc(ref Message m) {
// Hide tabs by trapping the TCM_ADJUSTRECT message
if (m.Msg == 0x1328) {
if (!tabsVisible && !DesignMode) {
m.Result = (IntPtr)1;
return;
}
}
base.WndProc(ref m);
}
}
答案 1 :(得分:2)
坟墓挖掘了一下,但我知道另一个解决方案。我不知道它来自哪里,但现在是:
在表单加载中:(VB.NET)
Tabcontrol1.Region = New Region (New RectangleF(TabPage1.Left, TabPage1.Top, TabPage1.Width, TabPage1.Height))
其中TabControl1
是标签控件的名称,TabPage1
是该控件中第一个标签页的名称。
如果你想让它作为例程使用,你可以这样做:
Public Sub hideTabs(ByVal TC as TabControl)
TC.Region = New Region(New RectangleF(TC.TabPages(0).Left,TC.TabPages(0).Top, TC.TabPages(0).Width, TC.TabPages(0).Height))
End Sub
就这么简单。有趣的是,标题不会在运行时显示,但它们在设计时可见。
答案 2 :(得分:1)
扩展Hans的答案:
我想让TabControl能够在设计时隐藏标签,但是有一个问题,一旦你隐藏了标签,就没有办法选择TabControl再打开它们,所以我创建了一个自定义TabPage,可以控制此属性
Imports System.Windows.Forms
Public Class NoHeaderTabPage
Inherits TabPage
Public Property ShowTabs() As Boolean
Get
Return CType(Me.Parent, NoHeaderTabControl).ShowTabs
End Get
Set(ByVal value As Boolean)
CType(Me.Parent, NoHeaderTabControl).ShowTabs = value
End Set
End Property
End Class