Как создать TabControl без заголовков вкладок? - PullRequest
4 голосов
/ 06 февраля 2011

Как мне создать менеджер вкладок, который не показывает заголовки вкладок?

Это приложение winforms, и цель использования диспетчера вкладок состоит в том, чтобы отображаемый контент можно было изменить только с помощью кода. Это хорошо для меню, где различные пункты меню изменяют содержимое экрана.

Ответы [ 5 ]

15 голосов
/ 06 февраля 2011

Спрятать вкладки на стандартном TabControl довольно просто, если вы знаете хитрость.Элемент управления вкладками отправляется TCM_ADJUSTRECT сообщение , когда ему нужно настроить размер вкладки, поэтому нам просто нужно перехватить это сообщение.(Я уверен, что на этот вопрос уже был дан ответ, но опубликовать код проще, чем искать его.)

Добавьте следующий код в новый класс в своем проекте, перекомпилируйте и используйте класс CustomTabControlвместо встроенного элемента управления:

class CustomTabControl : TabControl
{
    private const int TCM_ADJUSTRECT = 0x1328;

    protected override void WndProc(ref Message m)
    {
        // Hide the tab headers at run-time
        if (m.Msg == TCM_ADJUSTRECT && !DesignMode)
        {
            m.Result = (IntPtr)1;
            return;
        }

        // call the base class implementation
        base.WndProc(ref m);
    }
}

(Пример кода, первоначально взятый из Dot Net мысли .)

Обратите внимание, что это не будет работать правильно для заголовков табуляциирасположены по бокам или снизу.Но это не только выглядит странно, вы все равно не сможете видеть вкладки во время выполнения.Просто поместите их сверху, где они должны быть.

1 голос
/ 06 февраля 2011

Вместе со всеми, я нахожу ваш вопрос немного запутанным. Я использовал этот метод, найденный здесь раньше. Используя этот способ, вы получаете одно свойство, которое вы можете изменить, хотите ли вы отображать заголовки вкладок или нет.

1 голос
/ 06 февраля 2011

Правильно, если это веб-приложение, вы можете создать свой собственный DIV с тем же размещением и скрыть / показать в соответствии с вашими потребностями.

0 голосов
/ 01 июля 2015

Полагаю, использование панелей - самое простое решение. Кроме того, я предлагаю использовать мой (бесплатный, с открытым исходным кодом) VisualStateManager для упрощения переключения и устранения множества .Enabled = true ужасов.

Пакет доступен на Nuget .

Просто напишите этот код:

// Contains and propagates information about current page
private SwitchCondition<int> settingPageCondition;
// Controls state of specific controls basing on given SwitchCondition
private VisualStateSwitchController<int> settingPageController;

// (...)

private void InitializeActions()
{
    // Initialize with possible options
    settingPageCondition = new SwitchCondition<int>(0, 1);

    settingPageController = new VisualStateSwitchController<int>(
        null,                  // Enabled is not controlled
        null,                  // Checked is not controlled
        settingPageCondition,  // Visible is controller by settingPageCondition
        new SwitchControlSet<int>(0, pGeneral),   // State 0 controls pGeneral
        new SwitchControlSet<int>(1, pParsing));  // State 1 controls pParsing
}

// (...)

public void MainForm()
{
    InitializeComponent();
    InitializeActions();
}

// (...)

// Wat to set specific page
settingPageCondition.Current = 0;
0 голосов
/ 06 февраля 2011

После того, как редактирование и комментарии прояснили вопрос, я думаю, что обычный способ справиться с этим - использовать несколько панелей, а не вкладок.

...