Post tutorial RSS SlideHide [Rus only]

Вы наверное не раз замечали, как сайтах убираются различные элементы, и хотели бы сделать тоже самое в своей программе или внутри мода? Если да, то этот урок специально для Вас.( На примере Windows Aplication )

Posted by on - Basic Other

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

Итак, приступим. Для начала создайте проект Приложение Windows Forms в Visual Studio 2010/2008 на языке C#.

Сделали? Тогда едем дальше.

На форму добавляем объект Button( 2 штуки ), Panel и Timer. На Panel можете поставить изображение( Picture Box ) или текст ( Label ).
Первую кнопку называем "Свернуть", 2-ю - "Выход". На среднюю кнопку не обращаем внимания, о ней я расскажу в конце.

У таймера устанавливаем значение Interval=30 и name=SlideTimer.
Теперь все готово к написанию кода.

Жмем на 1-ю кнопку два раза, чтобы появился редактор кода.

Между фигурных скобок в Codeprivate void button1_Click(object sender, EventArgs e) вписываем:

Code
SlideTimer.Enabled = true;

Этим мы задали включение таймера после нажатия кнопки.
Теперь после
Codepublic partial class Form1 : Form
{
надо вписать Codeint i=0;. Этим мы задали целое число, которое пригодится для совершения операции сворачивания 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

Codei++;
и все повторяется до тех пор, пока i не будет равна 20. Сразу же после того как i = 20, панель скрывается,
Code SlidePanel.Hide(); и таймер останавливается 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, по чуть-чуть другому методу, поэтому разворачивается компонент не плавно, рывками. Этот метод можно посмотреть скачав исходный код проекта.

Post a comment
Sign in or join with:

Only registered members can share their thoughts. So come on! Join the community today (totally free - or sign in with your social account on the right) and join in the conversation.