WinForm TabControl: Как динамически скрывать / показывать заголовки вкладок? - PullRequest
3 голосов
/ 31 октября 2011

Я хочу сделать свою вкладку немного более умной, чтобы сэкономить часть экрана: не показывать заголовок вкладки, если имеется только одна вкладка, и показывать заголовки вкладок, если имеется две или более вкладок.знать, что вы можете полностью скрыть заголовок вкладки, как предложено на Как мне создать TabControl без заголовков вкладок? .Проблема этого подхода заключается в том, что после скрытия я не могу снова показать заголовок вкладки.Или я что-то пропустил?

Ответы [ 3 ]

5 голосов
/ 31 октября 2011

Кредитование парня, который на самом деле придумал идею :

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);
    }
}
2 голосов
/ 21 марта 2013

Могила немного копает, но я знаю другое решение.Я понятия не имею, откуда это взялось, но вот оно:

При загрузке формы: (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

легко.Что приятно, так это то, что заголовки не отображаются во время выполнения, но они видны во время разработки.

1 голос
/ 20 июля 2012

Чтобы расширить ответ Ханса:

Я хотел, чтобы 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
...