Вы наверное не раз замечали, как сайтах убираются различные элементы, и хотели бы сделать тоже самое в своей программе? Если да, то этот урок специально для Вас.
Итак, приступим. Для начала создайте проект Приложение Windows Forms в Visual Studio 2010/2008 на языке C#.
Сделали? Тогда едем дальше.
На форму добавляем объект Button( 2 штуки ), Panel и Timer. На Panel можете поставить изображение( Picture Box ) или текст ( Label ). Первую кнопку называем "Свернуть", 2-ю - "Выход". На среднюю кнопку не обращаем внимания, о ней я расскажу в конце.
У таймера устанавливаем значение Interval=30 и name=SlideTimer. Теперь все готово к написанию кода.
Жмем на 1-ю кнопку два раза, чтобы появился редактор кода.
Между фигурных скобок в Code private void button1_Click(object sender, EventArgs e) вписываем:
Code SlideTimer.Enabled = true; Этим мы задали включение таймера после нажатия кнопки. Теперь после Code public partial class Form1 : Form { надо вписать . Этим мы задали целое число, которое пригодится для совершения операции сворачивания Panel. После Code public Form1() { InitializeComponent(); } впишем: Code public void SlideUp() {
if (i < 20) {
SlidePanel.Width = SlidePanel.Width - (SlidePanel.Width * 25 / 100); SlidePanel.Height = SlidePanel.Height - (SlidePanel.Height * 25 / 100); i++; } else { SlideTimer.Enabled = false; } if (i == 20) { SlidePanel.Hide(); SlideTimer.Enabled = false; } button1.Text="Развернуть"; }
public void SlideDown() {
if (SlidePanel.Width < SlidePanel.MaximumSize.Width) {
SlidePanel.Width = SlidePanel.Width + SlidePanel.MaximumSize.Width*25/100; } if (SlidePanel.Height < SlidePanel.MaximumSize.Height) { SlidePanel.Height = SlidePanel.Height + SlidePanel.MaximumSize.Height*25/100; }
if(SlidePanel.Width==SlidePanel.MaximumSize.Width && SlidePanel.Height==SlidePanel.MaximumSize.Height) { SlideTimer.Enabled = false; i = 0; } if (i >= 20) { SlidePanel.Show(); } button1.Text = "Свернуть"; } Этим мы задали общие события для панельки: SlideUp - панель сворачивается, SlideDown - разворачивается. Мы вынесли void'ы для того, чтобы не загромождать этими действиями событие таймера Tick, т.к можно легко запутаться. Теперь разберем алгоритм: Сворачивание происходит в 20 стадий, т.е. пока i<20 ширина и высота панели сокращаются на 25% своей текущей длинны. Как только панель уменьшилась на 25%, к i прибавляется 1 и все повторяется до тех пор, пока i не будет равна 20. Сразу же после того как i = 20, панель скрывается, и таймер останавливается Code SlideTimer.Enabled = false; Тоже самое происходит и в SlideDown, но только без числа "i". В SlideDown все построено на том, что пока ширина и высота панели меньше их максимальных, к ним прибавляется 25% максимального размера. И по завершении SlideUp и SlideDown имена кнопок меняются на подходящие. Теперь событие таймера: Code private void SlideTimer_Tick(object sender, EventArgs e) { if (i < 20) { SlideUp(); } else { SlideDown(); } } После того как таймер запустили, он проверяет, если i<20( изначальное число), то запускается событие SlideUp, в противном случае - SlideDown. Компилируем и смотрим что у нас вышло. А теперь о кнопке 'Показать исходный код". Она сворачивает и разворачивает объект TextBox, находящийся в Panel, по чуть-чуть другому методу, поэтому разворачивается компонент не плавно, рывками. Этот метод можно посмотреть скачав исходный код проекта.
|