2011-02-06 2 views
4

Как создать менеджер вкладок, который не отображает заголовки вкладок?Как создать TabControl без заголовков табуляции?

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

+1

ли это WinForms или веб-приложение? – JPReddy

+1

@JPReddy Как вы узнали, что вы должны добавить тег ** infragistics **? – alex

+1

Не хватает информации. Какое приложение это (WinForms, WPF, Web, ...)? Используете ли вы управление вкладкой третьей стороны (как это рекомендовано при помощи @ JPReddy) или встроенный элемент управления вкладками? –

ответ

15

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

Добавить следующий код в новый класс вашего проекта, перекомпилировать и использовать класс 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 Thoughts.)

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

+0

@Nate Shoffner @Cody Gray Я пробовал это, но когда я перетащил новый менеджер вкладок разработчик я получаю ошибку: Фальсифицирован для создания компонента – unicorn

+0

@unicorn: Что такое * остальная * ошибка говорит? Вы сначала перестроили проект? Я знаю, что это работает, поэтому должно быть что-то еще неправильно. –

+0

линия 'base.WndProc (ref m);' был commet, исправил его и отлично работает, спасибо :) – unicorn

1

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

0

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

+0

как бы остро это помогло? скажем, мне нужно 3 экрана .. как мне это сделать? – unicorn

+0

будет 3 панели.Вы показываете, какой из них активен. –

+0

но как я могу переключаться между ними, когда я в дизайнере? они на вершине друг друга, нет? – unicorn

1

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

0

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

Пакет доступен on 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; 
Смежные вопросы