Использование элементов управления Windows Forms, чтобы сделать расширитель в C#
WPF, Silverlight, Metro или все, что Microsoft называет этим материалом, теперь дни имеют несколько полезных элементов управления в пространстве имен System.Windows.Controls, включая Expander. В Expander отображается небольшая стрелка и панель, где вы можете разместить другие элементы управления. Когда пользователь нажимает кнопку со стрелкой, элемент управления расширяет или сворачивает панель. Это позволяет вам делать много информации, доступной пользователю, позволяя пользователю показывать или скрывать информацию по своему желанию.
WPF, Silverlight, Metro или все, что Microsoft называет этим материалом, теперь дни имеют несколько полезных элементов управления в пространстве имен System.Windows.Controls, включая Expander. В Expander отображается небольшая стрелка и панель, где вы можете разместить другие элементы управления. Когда пользователь нажимает кнопку со стрелкой, элемент управления расширяет или сворачивает панель. Это позволяет вам делать много информации, доступной пользователю, позволяя пользователю показывать или скрывать информацию по своему желанию.
...
Основной стратегией примера является использование двух таймеров для расширения или сглаживания Panel, который содержит другие элементы управления. Свойства Panel элементов управления MaximumSize и MinimumSize определяют, сколько их можно развернуть или свернуть.
Когда пользователь нажимает кнопку развернуть / свернуть, выполняется следующий код.
// Текущее состояние расширителя. private bool Expanded = false; // Начнем расширять. private void btnExpander_Click(object sender, EventArgs e) { if (Expanded) { btnExpander.Image = Properties.Resources.expander_down; tmrCollapse.Enabled = true; tmrExpand.Enabled = false; } else { btnExpander.Image = Properties.Resources.expander_up; tmrExpand.Enabled = true; tmrCollapse.Enabled = false; } Expanded = !Expanded; }
Переменная Expanded указывает, расширяется ли теперь Panel. Обработчик событий кнопки проверяет эту переменную, чтобы решить, следует ли ей начинать разворачивать или сворачивать панель Panel. Если панель Panel в настоящее время расширена, код начинает свертывать ее. Он устанавливает изображение кнопки, чтобы показать изображение вниз (свернуть). Он отключает таймер коллапса и включает таймер расширения.
Код обрабатывает случай, когда панель в настоящее время свернута аналогичным образом, изменив изображение кнопки, включив таймер расширения и отключив таймер краха.
В следующем коде показан обработчик события Tick таймера расширения
.
// Число пикселей, разбросанных по таймеру. private const int ExpansionPerTick = 7; // Увеличьте панель расширителя. private void tmrExpand_Tick(object sender, EventArgs e) { int new_height = panAddress.Height + ExpansionPerTick; if (new_height >= panAddress.MaximumSize.Height) { tmrExpand.Enabled = false; new_height = panAddress.MaximumSize.Height; } panAddress.Height = new_height; }
Константа ExpansionPerTick дает количество пикселей, которые следует развернуть или свернуть Panel на таймер Tick. Я установил свойства Timer components Когда срабатывает событие Tick таймера расширения, он вычисляет новую высоту панели. Если эта высота больше или равна максимальной разрешенной высоте элемента управления Panel, код отключает таймер и устанавливает новую высоту максимально допустимой высоты. В следующем коде показан обработчик события Tick таймера коллапса. Этот код похож на предыдущий код, за исключением того, что он сворачивает Panel вместо его расширения. Вы можете сравнить два обработчика событий Tick, чтобы узнать, что другое. // Уменьшите панель расширителя.
private void tmrCollapse_Tick(object sender, EventArgs e)
{
int new_height = panAddress.Height - ExpansionPerTick;
if (new_height <= panAddress.MinimumSize.Height)
{
tmrCollapse.Enabled = false;
new_height = panAddress.MinimumSize.Height;
}
panAddress.Height = new_height;
}