Windows forms скрыть элемент
Я пытаюсь сделать многостраничное приложение, используя winforms. Я решил использовать несколько панелей - каждая панель представляет собой другую страницу, поэтому я могу переключаться между ними, когда мне нужно отобразить другой контент.
Я работаю над tricky UI. Часть того, что мне нужно сделать, - это легко показать и скрыть различные UserControls. Как правило, один элемент управления будет занимать все главное окно, когда это необходимо, а другой будет скрываться. В WinForms я просто использовал SendToBack и BringToFront и легко.
Несколько вариантов здесь:
- Используйте представление Document Outline ( View --> Other Windows --> Document Outline ), чтобы выбрать нужную панель. Вы можете щелкнуть по нему правой кнопкой мыши и выбрать Bring to Front , чтобы поставить его перед всем остальным.
- Хотя это, вероятно , не имеет отношения к тому, что вы делаете, вы можете рассмотреть возможность использования TabControl , с которым вы можете визуально возиться во время разработки. Это разумное решение только в том случае, если вы хотите, чтобы ваши пользователи могли вручную изменить, какую панель они просматривают.
- Подумайте о том, чтобы переместить свои панели в пользовательские классы UserControl и работать с ними отдельно. Если содержание и логика этих панелей достаточно самодостаточны, вы можете сделать это в любом случае, просто чтобы лучше реструктурировать свой код.
Добавление : Вы также можете использовать хак, который делает вкладки TabControl невидимыми для пользователя. Поместите TabControl в форму и во время выполнения установите высоту ItemSize на 1. Это делает (почти) невозможным для пользователя самостоятельно изменять вкладки, но все же позволяет изменять видимую вкладку в конструкторе.
Обратите внимание, что я назвал это взломом не просто так: TabControl s не предназначались для такого использования. Это то, что, кажется, работает, но, как и все хаки, оно может сломаться в любое время, поэтому вы должны делать это только в крайнем случае (и не вините меня, если позже это вызовет головную боль. ). Короче говоря, я не рекомендую этот хак, я предлагаю его только как возможность.
Я использую "Bring to front" или "Send to back" в разделе Формат > Для управления такого рода сценариями, но вы правы, это своего рода отстой, что видимость-это только время выполнения (AFAIK).
Я не уверен в правильном способе сделать это, но то, что я делаю сам в этих случаях, - это сделать элементы управления очень маленькими, а позже, при запуске программы, я изменяю их размеры и расположение при запуске.
Итак, вы хотите иметь возможность показывать/скрывать свою панель в представлении VS Designer (а не только при запуске фактического исполняемого файла) правильно?
Поможет ли что-то подобное?
Если нет, то, возможно, вы могли бы попробовать создать пользовательские пользовательские элементы управления вместо панелей, которые позволили бы вам устанавливать свойства видимости по своему усмотрению, или вы могли бы прибегнуть к использованию WPF, который обеспечивает этот тип функциональности. Нажмите здесь для получения дополнительной информации.
базовый вопрос: После того, как скрытый родитель становится :visible , его дети остаются невидимыми У меня есть HTML следующим образом <div <h3>Title</h3> <div> <p>description</p> <div>Sub one description</div> <div> <table>.
Как мне показать элементы li, а затем скрыть их? То, что у меня есть ниже, скрывает элементы списка, которые я не хочу показывать, он показывает их все, когда я нажимаю ссылку a.show-button, но я также хочу скрыть элементы списка, нажав на ту же ссылку после изменения ее класса. Не могу.
Один из подходов, который я использовал в этой ситуации, состоит в том, чтобы использовать окно Document Explorer, чтобы вывести панель, над которой я работаю, на передний план.
Если это приемлемо для вас, рассмотрите возможность использования элемента управления TabControl и поместите каждый из элементов управления Panel на другую вкладку. Затем вы можете скрыть и показать правильную страницу, переключаясь между вкладками или программно удаляя и добавляя соответствующую вкладку в элемент управления.
Вы также можете рассмотреть возможность использования двух разных windows с разными макетами и показать переключение между ними.
Если вы используете более нескольких панелей, вы можете поместить каждую из них в отдельный элемент управления, а затем просто использовать элементы управления в форме приложения (т. Е. Добавлять их программно, когда это необходимо). Таким образом, вы можете спроектировать каждый из элементов управления (таким образом, каждый из содержимого Panel ) отдельно, чтобы другие Panel были видны.
Каждое из этих предложений сделает некоторые части UI более разделенными, что может быть желательно, если каждый из ваших макетов связан с отдельной частью приложения. Использование этих предложений также может значительно упростить использование deisgner для управления.
Попробуйте this.richTextBox1.Visible = false; в вашем Form1.cs (предполагая, что вы пытаетесь скрыть форматированное текстовое поле с именем по умолчанию "richTextBox1")
Похожие вопросы:
В моем приложении я добавляю много элементов управления друг на друга (winforms дизайнерская природа), и это становится очень трудно управлять; однако для пользователя нет никаких проблем, так как.
У одного из наших клиентов есть старое приложение WinForms, которое содержит формы с большим количеством элементов управления на них. Некоторые из этих элементов управления имеют глубокую иерархию.
Я работаю над tricky UI. Часть того, что мне нужно сделать, - это легко показать и скрыть различные UserControls. Как правило, один элемент управления будет занимать все главное окно, когда это.
базовый вопрос: После того, как скрытый родитель становится :visible , его дети остаются невидимыми У меня есть HTML следующим образом <div <h3>Title</h3> <div>.
Как мне показать элементы li, а затем скрыть их? То, что у меня есть ниже, скрывает элементы списка, которые я не хочу показывать, он показывает их все, когда я нажимаю ссылку a.show-button, но я.
У меня есть список, который скрывает все элементы после показа 2 элементов. Я хочу показать и скрыть элементы в отдельных группах( показать больше), когда они скрыты, и (показать меньше), когда они.
React Native использование React Navigation - Показать / Скрыть элемент ящика Мне было интересно, не придумали ли вы, ребята, или, может быть, кто-то лучше показать или спрятать какой-нибудь пункт.
Форма является основным компонентом графического интерфейса программы. Именно на ней размещаются управляющие интерфейсы.
Рассмотрим некоторые из свойств формы, которые влияют на её внешний вид.
Объявляем форму
Для того что бы объявить форму, нам надо добавить библиотеку System.Windows.Forms.dll
После объявляем форму $main_form
Отобразим форму $main_form.
В результате получилась вот такая форма:
Что бы в загаловке формы отобразить текст нужно присвоить его свойству Text нашей формы:
Текст отобразится в заголовке:
Изменение размера формы:
Давайте изменим размер формы.
Это можно сделать через свойства Width(ширина) и Height(высота) формы, где значения параметров это кол-во пикселей.
Этого же результата можно добиться используя параметр формы Size:
$main_form . Size = New-object System . Drawing . Size ( 300 , 500 )Так же можно задать размер с помощью параметра DesktopBounds:
$main_form . DesktopBounds = New-object System . Drawing . Rectangle ( 0 , 0 , 300 , 500 )Так же для изменения размеров можно воспользоваться свойством ClientSize
$main_form . ClientSize = New-object System . Drawing . Size ( 300 , 500 )Однако этот параметр задаёт клиентскую область формы, которая по размерам меньше самой формы. Поэтом получившаяся форма, по размерам окажется больше, чем в предыдущих примерах.
Однако данные свойства не ограничивают размер формы в период жизни программы, пользователь может изменить размер формы или распахнуть её на весь экран, что может существенно сказаться на внешнем виде формы. Поэтому иногда форму приходится ограничить возможность сжимать и/или растягивать форму.
Для этогу существуют такие параметры , как MinimumSize(минимальный размер формы) и MaximumSize (максимальный размер формы). Если задать эти параметры, то в период жизни форма не сможет за них выйти.
Пример объявления данных свойств:
Но вычислять область окна бывает довольно сложно, удобнее всего отдать эту задачу автоматическим средствам управления окнами.
Для этого с начала надо разрешить менять размер формы, в зависимости от расположения объектов в области видимости свойством AutoSize перевести его в значение true
После надо выбрать режим автоматического подбора размера формы и указать его в свойстве AutoSizeMode. Существует два режима этого свойства GrowOnly и GrowAndShrink:
$main_form . AutoSizeMode = [ System . Windows . Forms . AutoSizeMode ] : : GrowOnly $main_form . AutoSizeMode = [ System . Windows . Forms . AutoSizeMode ] : : GrowAndShrinkШрифты
Так же не малую роль в отображении формы влияют шрифты. К тому же настройки шрифтов наследуются на управляющие элементы принадлежащие этой форме.
Настройки шрифта хранятся в свойстве формы Font данное свойство наследуется другим упавляющим компонентам на форме. Изменять свойства Font по отдельности нельзя, но можно переопределить его польностью следующим образом:
$main_form . Font = New-Object System . Drawing . Font ( "Calibri" , 24 )Что бы поменять цвет шрифта существует следующее свойство ForeColor:
Не малуюроль в определении размеров управляющих элементов играет размер шрифта его можно узнать из свойства AutoScaleBaseSize, его так же можно перераспределить.
Шаблон окна
Шаблон окна формы опредиляется парметром FormBorderStyle, который может принимать семь значений Fixed3D, FixedDialog, FixedSingle, FixedToolWindow, None, Sizabl, SizableToolWindow по умолчанию стоит значение Sizable. Заметим, что внешний вид формы на примерах может существенно отличаться на разных компьютерах и существенно зависит от OC. Так же после назначения определённого шаблона окна в дальнейшем его можно будет редактировать другими свойствами формы.
Рассмотрим шаблоны формы:
$main_form . FormBorderStyle = [ System . Windows . Forms . FormBorderStyle ] : : Fixed3DУправляющие кнопки
Для управления отображения управляющими кнопками используются следующие свойства ControlBox, MaximizeBox и MinimizeBox.
Свойство ControlBox управляет видимостью всей областью управляющих кнопок. По умолчанию она находиться в состоянии true.
Зададим данному свойству значение false
Если в форме свойству Text присвоить пустое значение, то шапка формы совсем исчезнет.
Вот так будет выглядеть форма:
Включим назад ControlBox и рассмотрим следующие свойства: MaximizeBox и MinimizeBox. Они тоже булевые и служат для того, что бы выключать кнопки развернуть окно и свернуть окно. По умолчанию они имеют свойство true. Рассмотрим как выглядит их выключение:
Однако, если выключить и MaximizeBox и MinimizeBox кнопки перестают быть видимыми:
Заметим так же, что отключение кнопок по одиночке или одновременно влияет не только на отображение этих кнопок и возможностями их использовать, но так же и на свойство формы. Так на форме с выключенным свойством MaximizeBox пользователю отключаются все стандартные возможности распахнуть форму на весь экран. Так же дела обстоят и с MinimizeBox.
Иконка.
Иконка отображаемая в левом верхнем углу формы, а так же отображаемая в панели задач может определить через свойство формы Icon например вот так:
$main_form . Icon = New-Object System . Drawing . Icon ( "d:\favicon.ico" )
Если же мы не хотим, что бы иконка отображалась, то её можно скрыть, с помощью свойства ShowIcon установив его в состояние false. Если же шаблон окна не подразумевает наличия иконки, её так же можно включить через это свойство установи параметр truе
Элемент захвата
Для того, чтобы задать видимость захвата для изменения размера, отображаемого в правом нижнем углу формы. Нужно воспользоваться свойством SizeGripStyle. Оно имеет 3 значенич Auto, Hide, Show
Данное значение стоит по умолчанию. Форма сама решает отображать этот элемент или нет.
Элемент будет скрыт с формы.
$main_form . SizeGripStyle = [ System . Windows . Forms . SizeGripStyle ] : : Hideэлемент отображается на форме
$main_form . SizeGripStyle = [ System . Windows . Forms . SizeGripStyle ] : : ShowЦвет и прозрачность.
Что бы задасть цвет формы нужно воспользоваться свойством BackColor, этот параметр будет наследоваться размещённым на данной форме управляющим элементам. Сделаем цвет рабочей области, например синим:
А в свойстве TransparencyKey формы мы должны указать, какой цвет будет заменяться на прозрачный.
Эти параметры прозрачности будут так же наследоваться на управляющие элементы формы.
Это свойство можно использовать для рисования не стандартных окон убрав перед этим рамку формы
$main_form . FormBorderStyle = [ System . Windows . Forms . FormBorderStyle ] : : NoneЕсли же мы не хотим делать дырки в форме, а всеволишь сделать её слегка прозрачной, мы можем воспользоваться свойством Opacity, значения в ней колеблятся от 0 это полностью прозрачная до 1, не прозрачная.
Курсор
Для изменения вида курсора в приложении можно воспользоваться свойством формы Cursor:
$main_form . Cursor = New-Object System . Windows . Forms . Cursor ( "d:\Cursor.cur" )Так же можно узнать перехватывается ли курсор приложением в даннй момент, для этого нужно посмотреть данные свойства формы Capture
Что бы уведомить пользователя о текущем процессе, можно так же включить курсор ожидания указав в свойстве UseWaitCursor значение true
Состояние окна.
Что бы узнать в каком состоянии находиться окно или изменить его, можно воспользоваться свойством формы WindowState оно принимает три значения Maximized, Minimized, Normal.
Что бы развернуть окно:
$main_form . WindowState = [ System . Windows . Forms . FormWindowState ] : : MaximizedСвернуть в панель задач:
Перевести в обычный(свободный) режим:
$main_form . WindowState = [ System . Windows . Forms . FormWindowState ] : : NormalЗеркальный вид окна
Так же есть возможность показать зеркальную форму обычно это используют для приложений в которых ввод текста происходит с права на лево.
Для этого нам нужно сначала включить поддержку ввода текста с права на лево свойством формы RightToLeft
$main_form . RightToLeft = [ System . Windows . Forms . RightToLeft ] : : YESТолько после этого можно отобразить форму зеркально установив свойство формы RightToLeftLayout в значение true
Посмотреть отображается ли форма в зеркальном виде можно из свойства формы IsMirrored.
Отображение в Панели задач.
Видимость окна.
Так же если надо сделать, что бы форма не закрывалась другими окнами можно воспользоваться свойством TopMost. Если установить его в значение true то другие окна не смогут заслонить его.
Для формы существуют параметры видимости, но для отображения формы лучше пользоваться функция Enabled если установить его в значение false, то его не удасться отобразить методом ShowDialog().
Так же если надо скрыть форму, то это можно сделать изменив свойство Visible на false. Можно так же отобразить форму, но это может быть не всегда хорошей идеей, лучше пользоваться методом ShowDialog.
Комментарии:
Комментарии 12
Огромное спасибо за подробный разбор!
Очень сильно помогло в пониманиии концепции построения GUI для повершела =)
Приятно осознавать, что мой блог помогает людям. 🙂
Данная статья описывает основы, лучшие методы и соглашения реализации событий.
Предположения об аудитории
Литература, описывающая события и связанные с ними идеи, часто использует множество слов или выражений для описания любого конкретного понятия. Следующий список перечисляет большую часть данной терминологии с краткими пояснениями идей, лежащих в основе выражений.
событие, предсобытие, постсобытие, и состояние, изменение состояния и ожидаемое изменение состояния
Термин "событие" обычно означает, что произошло или вскоре произойдет изменение в состоянии объекта. Термин также используется в отношении некоторых действий, совершающихся внутри объекта или приложения – таких действий, как обработка знака от конечного пользователя (например, нажата кнопка), или оповещение о прогрессе в течение длительной задачи.
Термин "состояние" ссылается на текущий набор значений одной или более переменных в объекте или приложении. Изменение в состоянии означает, что значение одной или более переменных внутри объекта изменилось. В процессе уведомления о событии изменения в состоянии, или ожидаемые изменения в состоянии, являются главными причинами возбуждения событий. Поэтому есть два способа определить событие, связанное с изменением в состоянии: непосредственно перед изменением в состоянии, или сразу после изменения в состоянии. Первые называются предсобытиями, а последние постсобытиями.
Постсобытия объявляют, что изменение в состоянии уже произошло, а предсобытия объявляют, что изменение в состоянии вскоре произойдет. Предсобытия могут быть реализованы как отменяемые – означает, что подписчик может отменить событие до того, как произойдет изменение в состоянии, тем самым не дав возникнуть изменению в состоянии, или запретив последующую обработку длительной задачи.
публикатор события, источник события, предмет
Это классы или объекты, состояние которых представляет интерес для других классов или объектов. Публикаторы событий сохраняют свое внутреннее состояние и уведомляют другие классы (подписчиков) посредством возбуждения событий или аналогичных механизмов уведомления.
подписчик события, получатель, слушатель, наблюдатель
Это классы или объекты, интересующиеся изменениями в состоянии (или ожидаемыми изменениями в состоянии) публикаторов событий. Эти термины ссылаются на классы или объекты, обычно выполняющие некоторое действие в ответ на возникновение события.
возбудить, запустить, или вызвать событие; уведомление, или уведомление о событии
Уведомления о событиях (часто выражаемые в виде, "запустить событие" или "возбудить событие" или "вызвать событие") обычно имеют форму публикатора события, вызывающего метод в одном или более подписчиков. Следовательно, возбуждение события в итоге означает, что код в публикаторе события вызывает выполнение кода в одном или более подписчиков.
данные о событии, связанные с событием данные, и аргументы события ("event args")
Когда событие возбуждается, публикатор часто включает данные, отправляемые подписчикам посредством процесса уведомления о событии. Эти данные, вероятно, относятся к конкретному событию, которое было возбуждено, и представляют интерес для подписчиков событий.
Например, событие может быть возбуждено, когда файл переименовывается. Данные, относящиеся к данному конкретному событию "файл переименован", могут включать (1) имя файла до изменения имени, и (2) имя файла после изменения имени. Эти имена файлов могут образовать данные о событии, отправляемые подписчикам во время возбуждения события "файл переименован".
Тип делегата, делегаты
Два значения "обработчика события"
Для обобщения: "обработчик события" – делегат, на котором событие основано, тогда как "метод обработки события" – метод, вызываемый в подписчике, когда событие возбуждается.
Обработчики событий являются делегатами, несмотря на то, что делегаты не обязательно являются обработчиками событий (существует много применений делегатов, помимо поддержки событий). Делегаты более подробно описаны далее в этой статье, но лишь в той части, в какой они относятся к событиям.
Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
Растянуть элементы на форме Windows Forms
Создадим в Visual Studio проект Windows Forms и разместим на форме следующие элементы управления:
Запустим программу и с помощью мыши попробуем увеличить размеры окна, потянув правый нижний угол формы. В результате получим следующее:
Видим, что окно формы увеличилось в размере, но элементы управления никак не реагируют на данные изменения.
Теперь покажем, как создать адаптивный к изменениям размера окна интерфейс на форме Windows Forms.
Как растянуть элементы на форме Windows Forms
В Windows Forms свойство Anchor определяет стороны контейнера (Top, Bottom, Left, Right) к которым привязывается элемент управления. При изменении размера контейнера расстояние между указанной стороной контейнера и ближайшей к ней стороне элемента управления остаётся неизменным.
Таким образом можно добиться растягивания и перемещения элементов в форме при изменении её размера.
В нашем случае контейнером для элементов управления является всё окно.
Зададим для TextBox значение атрибута Anchor = Top, Left, Right. Теперь расстояние между соответствующими сторонами ТекстБокса и окна будет неизменным. Так мы добьёмся изменения ширины контрола при изменении ширины окна.
Для RichTextBox значение свойства Anchor сделаем равным Top, Bottom, Left, Right.
У кнопки Button установим Anchor, как Top, Right.
Теперь запустим программу и изменим размер окна: увидим, что элементы управления на форме растягиваются и меняют своё местоположение. Теперь интерфейс стал адаптированным к изменению размера окна.
Чтобы решить данную проблему, необходимо указать минимальный размер формы Windows Form в пикселях. Тем самым форму будет невозможно сделать меньше установленного размера.
Щёлкнем по форме и в окне свойств изменим параметр MinimunSize. Установим его равным текущему размеру формы в визуальном редакторе (Size).
Читайте также: