Winforms - как показать / скрыть элементы в дизайнере? - PullRequest
24 голосов
/ 03 апреля 2012

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

Моя проблема заключается в расположении панелей в режиме конструктора Когда у меня есть 2+ полноэкранные панели, они все накладываются друг на друга, и я не вижу ту, которую я создал ранее. Есть ли какое-то решение этого? Изменение видимости не влияет на вид дизайнеров. Думайте об этом как фотошоп-подобный вариант, чтобы показать / скрыть слои. Я использую Visual C # 2010 Express.

Ответы [ 7 ]

29 голосов
/ 03 апреля 2012

Несколько вариантов здесь:

  1. Используйте представление Document Outline (View --> Other Windows --> Document Outline), чтобы выбрать панель, которая вам нужна.Вы можете щелкнуть по нему правой кнопкой мыши и выбрать Bring to Front, чтобы поставить его поверх всего остального.
  2. Хотя это, вероятно, не имеет отношения к тому, что вы делаете, вы можете рассмотреть возможность использования TabControl, который выможет связываться визуально во время разработки.Это разумное решение, если вы хотите, чтобы ваши пользователи могли вручную изменять панель, которую они просматривают.
  3. Подумайте о том, чтобы переместить ваши панели в пользовательские классы UserControl и работать с ними отдельно.Если содержимое и логика этих панелей достаточно автономны, вы можете сделать это в любом случае, чтобы лучше реструктурировать свой код.

Приложение : Вы можететакже используйте хак, который делает вкладки TabControl невидимыми для пользователя.Поместите TabControl на вашу форму, и во время выполнения установите высоту ItemSize в 1. Это делает (почти) невозможным для пользователя изменять вкладки самостоятельно, но все же позволяет вам изменять видимую вкладкув конструкторе.

myTabControl.ItemSize = new Size(myTabControl.ItemSize.Width, 1);

Обратите внимание, что я назвал это hack по причине: TabControl s не предназначены для использования таким образом.Это то, что, кажется, работает, но, как и все хаки, оно может сломаться в любое время, поэтому вы должны делать это только в крайнем случае (и не вините меня, если позже это вызовет головную боль ...).Короче, я не рекомендую этот хак, я только предлагаю его как возможность.

5 голосов
/ 03 апреля 2012

Я использую «Вывести на передний план» или «Отправить на задний план» в меню «Формат> Порядок» для управления сценариями такого типа, но вы правы, отчасти это отстой, что видимость только во время выполнения (AFAIK).

Приветствия

1 голос
/ 03 апреля 2012

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

0 голосов
/ 14 ноября 2018

Попробуйте this.richTextBox1.Visible = false; в вашем Form1.cs (если вы пытаетесь скрыть форматированное текстовое поле с именем по умолчанию «richTextBox1»)

0 голосов
/ 03 апреля 2012

То есть вы хотите иметь возможность показать / скрыть панель в представлении конструктора VS (а не только во время работы фактического исполняемого файла) правильно?

Что-то вроде , это поможет?

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

0 голосов
/ 03 апреля 2012

Если это приемлемо для вас, рассмотрите возможность использования элемента управления TabControl и поместите каждый из элементов управления Panel на отдельную вкладку.Затем вы можете скрыть и отобразить правильную страницу, переключаясь между вкладками или программно удаляя и добавляя соответствующую вкладку в элемент управления.

Вы также можете рассмотреть возможность использования двух разных окон с разными макетами и показа переключения между ними.

Если вы используете не только несколько панелей, вы можете рассмотреть возможность размещения каждой из них в отдельном элементе управления, а затем просто использовать элементы управления в форме приложения (т.е. добавлять их программно при необходимости).Таким образом, вы можете создать каждый из элементов управления (таким образом, каждый из элементов Panel) отдельно, без видимых других Panel.

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

0 голосов
/ 03 апреля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...