2010-05-09 3 views
9

Мне нужно обработать несколько панелей, содержащих различные маски данных. Каждая панель должна быть видимой с помощью элемента управления TreeView.Скрыть кнопки управления TabControl для управления штабелированными элементами управления панелью

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

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

Хорошим решением было бы с помощью TabControl , и каждая панель содержится в TabPage. Но я не могу найти способ скрыть кнопки TabControl, так как у меня уже есть TreeView для выбора элементов.

Другим решением будет ipotethic «StackPanelControl», где панели расположены с использованием стека, но я не мог найти его нигде.

Какое оптимальное решение для работы с этим интерфейсом?

ответ

20

Вам нужна небольшая часть магии API Win32. Элемент управления вкладкой отправляет сообщение TCM_ADJUSTRECT, чтобы приложение могло настроить размер вкладок. Добавьте новый класс в свой проект и вставьте код, показанный ниже. Компиляция. Отбросьте новый элемент управления сверху панели инструментов на свою форму.

Вы получите вкладки во время разработки, чтобы вы могли легко переключаться между страницами. Закладки скрыты во время выполнения, используйте свойство 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); 
    } 
} 
+1

Вы находите, что это не работает в 64-битной компиляции? По какой-то причине он работал 32-битный, получив ошибку: «Не удалось найти тип ___. Убедитесь, что ссылка на сборку, содержащую этот тип, указана ... и т. Д.». – fa1c0n3r