Выдвигающаяся панель 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
}
}