В Flex есть компонент ViewStack. Имеет ли C# аналогичный контроль?
Если да, то какой? Если нет, как вы создаете подобное поведение?Имеет ли C# winforms элемент управления, например «ViewStack» в Flex?
ответ
Да, компонент TabControl работает таким образом. Все, что вам нужно сделать, это скрыть вкладки. Добавьте новый класс в свой проект и вставьте код, показанный ниже. Компиляция. Отбросьте новый элемент управления сверху панели инструментов на свою форму. Вкладки все еще видны во время разработки, что упрощает редактирование страниц. Но скрыты во время выполнения. Используйте свойство SelectedTab или SelectedIndex, чтобы выбрать представление.
using System;
using System.Windows.Forms;
class ViewStack : 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);
}
}
Я не думаю, что он существует изначально. Вам, вероятно, придется играть со свойством Visible.
Нет, нет стандартного элемента управления, который обеспечивает такое же поведение.
Однако, чтобы получить подобное поведение, я просто создаю новый UserControl для каждого элемента в стеке представления и добавлю их в родительскую форму в том же месте и с той же шириной/высотой.
Используя вспомогательный метод, тогда просто скрыть все пользовательские элементы управления, а затем отобразить конкретное пользовательское управление на основе входного параметра.
Основным преимуществом UserControls является то, что вы можете использовать конструктор для визуального создания каждого из отдельных элементов стека. Возможным недостатком является то, что если у вас много элементов в стеке или каждый элемент стека сложный, использование памяти может стать довольно большим.
И это (каким-то образом), как, например, создается окно параметров в Visual Studio? Вот что подняло мой вопрос. – MysticEarth
Не знаю наверняка, но, скорее всего, будет использовать подобный подход. Еще более легкий подход может заключаться в использовании элементов управления Panel вместо UserControls, но это, вероятно, потребует, чтобы каждая панель динамически заполнялась дочерними элементами управления во время выполнения. – Ash
Хотя это работает, у меня были проблемы с упорядочением вопросов при работе с элементом управления вкладками. Чтобы скрыть/показать страницы, он просто изменяет порядок z на видимой странице, чтобы довести ее до вершины. У меня есть некоторые дочерние элементы управления, которые видны, даже если их родительская вкладка не активна. – Ash
@ash - это очень необычно, может быть, вам стоит начать тему об этом. –
Хороший ответ :) Действительно полезно, но как мне отключить навигацию между вкладками, чтобы все компоненты на вкладках работали правильно? Я не могу вернуть true в 'ProcessCmdKey', потому что этот способ даже простой textBox не будет работать – Misiu