Выдвигающаяся панель c#

столкнулся со следующей проблемой - имеется выдвигающаяся panel1, которая изменяет положение при событии Hover от y: 1000, x:0 кy: 1000, x:400, это функцию я спокойно реализовал (используя таймер), но потом решил добавить возможность закреплять панель (на 1000:400) при помощи radiobutton, но у меня не получилось (Все это происходит на WinForm, к слову). Буду рад любой помощи.

private void panel2_MouseHover(object sender, EventArgs e) 
{ 
 timer1.Start(); 
} 
private void timer1_Tick(object sender, EventArgs e) 
{ 
 panel1.Height += 10; 
 if ( panel1.Height > panel2.Height) 
 timer1.Stop(); 
} 

Ответы (2 шт):

Автор решения: Иван Рудаков

Я использую в данном примере асинхронную задержку Delay(Время задержки в миллисекундах) для изменения размера Panel. Исходя из вопроса вы изменяете размер panel1 равному размеру panel2. Отметьте мой ответ если я вам помог.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Panel_Animation
{
    public partial class Form1 : Form
    {
        Panel panel_animatoin;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            panel_animatoin = new Panel { Parent = this, Location = new Point(3, 3), Size = new Size(100, 100), BackColor = Color.DarkGray }; // Создаю панель
            panel_animatoin.MouseHover += panel_animatoin_MouseHover; // Объявляю свойство MouseHover для панели
        }

         async void Animation_Async()
        {
            int Width = panel2.Size.Width; // Можно увеличить размер так: +10;
            int Height = panel2.Size.Height; // Можно увеличить размер так: +10;
            while (panel_animatoin.Size.Width <= Width) // Цикл будет выполняться пока ширина панели не станет равна Width 
            {
                await Task.Delay(1); // Задержка в миллисекундах
                panel_animatoin.Size = new Size(panel_animatoin.Width + 1, panel_animatoin.Size.Height); // Изменение ширины(X) Panel

            }
            while (panel_animatoin.Size.Height <= Height) // Цикл будет выполняться пока высота панели не станет равна Height 
            {
                await Task.Delay(1); // Задержка в миллисекундах
                panel_animatoin.Size = new Size(panel_animatoin.Width, panel_animatoin.Size.Height +1);// Изменение высоты(Y) Panel
            }
        }

        private void panel_animatoin_MouseHover(object sender, EventArgs e)
        {
            Animation_Async();
        }
    }
}
→ Ссылка
Автор решения: Иван Рудаков

Для примера я изменяю сначала ширину panel, затем высоту, если вы хотите изменять одновременно ширину и высоту вы можете использовать один цикл

 async void Animation_Async()
        {
            int Width = panel2.Size.Width + 10;
            int Height = panel2.Size.Height + 10;
            while (panel_animatoin.Size.Width <= Width && panel_animatoin.Size.Width <= Height) // Цикл будет выполняться пока ширина панели не станет равна Width 
            {
                await Task.Delay(1); // Задержка в миллисекундах
                panel_animatoin.Size = new Size(panel_animatoin.Width + 1, panel_animatoin.Size.Height + 1); // Изменение ширины(X) Panel

            }
        }
→ Ссылка