动画:C#表单上的滑动和淡入控件(winforms)

cae*_*say 15 c# math winforms sliding

我正在尝试优雅地实现一种方法来动画(平移,淡化)控件(可能同时多于一个).例如,假设我左上角有一张图片,右下角有一个文本框,我希望能够让它们平滑地滑过窗口并切换位置.我已经工作了一段时间,但没有想出任何能够顺利或轻松实现这一目标的东西.

Nat*_*lch 20

查看Google Code上的dot-net-transitions项目.现在Github上有一个克隆版.它也可以在nuget上使用dot-net-transitions.它支持各种线性/非线性转换,包括复合转换,可用于更复杂的效果,如纹波.

这是一个演示您所需行为的工作示例:

var pictureBox = new PictureBox
    {
        ImageLocation = "http://icons2.iconarchive.com/icons/klukeart/summer/128/hamburger-icon.png",
        SizeMode = PictureBoxSizeMode.AutoSize
    };
var textBox = new TextBox
    {
        Text = "Hello World",
        Location = new Point(140, 140)
    };
var form = new Form
    {
        Controls =
        {
            textBox,
            pictureBox
        }
    };
form.Click += (sender, e) =>
    {
        // swap the Left and Top properties using a transition
        var t = new Transition(new TransitionType_EaseInEaseOut(1000));
        t.add(pictureBox, "Left", textBox.Left);
        t.add(pictureBox, "Top", textBox.Top);
        t.add(textBox, "Left", pictureBox.Left);
        t.add(textBox, "Top", pictureBox.Top);
        t.run();
    };
form.ShowDialog();
Run Code Online (Sandbox Code Playgroud)


SLa*_*aks 8

我建议你切换到WPF; 这将使它变得容易.

在WinForms中完全不可能淡化控件; Windows控件不能具有不透明度.
最接近的是将窗体上的控件及其区域渲染为一对位图,然后使用ColorMatrix对PictureBox中的位图进行交叉淡化.

要在WinForms中滑动控件,可以使用Timer逐步更改控件的Top和/或Left属性,并在窗体中移动它们.但是,你会得到一个恼人的闪烁,这是(AFAIK)无法删除.