WinForms Tab Контрольный вопрос - PullRequest
       21

WinForms Tab Контрольный вопрос

3 голосов
/ 10 декабря 2010

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

Элемент управления вкладкой был бы идеальным, если бы я мог скрыть саму вкладку.

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

В идеале, я хотел бы использовать элемент управления «мастер», который не имеет вкладок, и во время разработки нарисовать элементы управления для первой страницы, переключить свойство «PageNumber» на страницу 2, а затем перетащить элементы управления на вторая страница.

Я думал, что у TabControl есть функциональность, которая отображается без вкладок, что, например, прекрасно подходит для создания интерфейса в стиле мастера.

Какой лучший способ сделать это, чтобы мой внешний вид во время разработки имитировал время выполнения?

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

У меня есть элементы управления Telerik Q3 WinForm, на случай, если в этом наборе есть альтернатива ...

Предложения

Ответы [ 4 ]

13 голосов
/ 10 декабря 2010

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

using System;
using System.Windows.Forms;

class PageControl : 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);
  }
}
0 голосов
/ 10 декабря 2010

Чтобы имитировать сокрытие Tab, я просто Remove. Проблема в том, что вы не можете легко вернуть его обратно, поэтому я использую его в формах, где я знаю, что он будет открыт по одной конкретной причине и закрыт позже без необходимости фактически использовать удаленную вкладку. Если вы снова откроете форму, используя другой параметр, она откроется с другой вкладкой и удалит ненужные.

0 голосов
/ 10 декабря 2010

Я бы определенно использовал пользовательские элементы управления, соответствующие каждому «контенту», который вы хотите отобразить, и, как вы заявили, программно отображать / скрывать их.Что касается «привязки», поместите материал в «пользовательский элемент управления», где вы хотите, и закрепите соответственно.Затем, чтобы ваш «пользовательский элемент управления» имел свое собственное свойство привязки, когда вы добавляете его в форму.Изменение размера, размещение якоря и перерисовка элементов управления, по-видимому, выполняются только тогда, когда элемент управления виден.Поэтому, когда вы в первый раз запускаете форму, убедитесь, что ИТ (пользовательский элемент управления) виден, ТО затем измените ее высоту / ширину, как это необходимо для начального отображения формы, а затем запустите ее оттуда.

0 голосов
/ 10 декабря 2010

Для чего бы это ни стоило, я бы предложил вам SplitContainer и перемещать SplitSeparator слева направо, когда это необходимо ...

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

Надеюсь, это поможет,

...