Search code examples
c#winformseffectsmovegroupbox

How can I add moving effects to my controls in C#?


I have a Panel In my C# form and I have a button. When I click on the Button the invisible Panel Shows. Instead of that I want the Panel to move in or slide in. For example when you click on a combobox the dropdown list doesnt just pop in. I want my Panel to appear like that. How can I do that ?


Solution

  • Window animation is a built-in feature for Windows. Here's a class that uses it:

    using System;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    
    public static class Util {
        public enum Effect { Roll, Slide, Center, Blend }
    
        public static void Animate(Control ctl, Effect effect, int msec, int angle) {
            int flags = effmap[(int)effect];
            if (ctl.Visible) { flags |= 0x10000; angle += 180; }
            else {
                if (ctl.TopLevelControl == ctl) flags |= 0x20000; 
                else if (effect == Effect.Blend) throw new ArgumentException();
            }
            flags |= dirmap[(angle % 360) / 45];
            bool ok = AnimateWindow(ctl.Handle, msec, flags);
            if (!ok) throw new Exception("Animation failed");
            ctl.Visible = !ctl.Visible;
        }
    
        private static int[] dirmap = { 1, 5, 4, 6, 2, 10, 8, 9 };
        private static int[] effmap = { 0, 0x40000, 0x10, 0x80000 };
    
        [DllImport("user32.dll")]
        private static extern bool AnimateWindow(IntPtr handle, int msec, int flags);
    }
    

    Sample usage:

        private void button2_Click(object sender, EventArgs e) {
            Util.Animate(button1, Util.Effect.Slide, 150, 180);
        }