【问题标题】:How to add animated gif to a button?如何将动画 gif 添加到按钮?
【发布时间】:2010-10-23 23:35:57
【问题描述】:

你能告诉我如何在 c# 中为按钮添加动画 gif。仅通过将 gif 添加到资源并设置为按钮图像效果不佳(下一帧出现在前一帧之上)。问题似乎在于 c# 如何处理透明度,但我不知道如何解决它。

提前致谢。

--- 编辑---

使用 gif 后,问题在于 gif 的透明度。下一帧是在前一帧上绘制的,所以我想在动画中间变得透明的元素没有正确完成(它们仍然具有前一帧的颜色)。解决方案是在下一帧上创建白色区域以覆盖前一帧。白色是我的透明颜色,所以在那之后一切看起来都很好:)

我希望有人会看到它有用。 快乐编程:)

【问题讨论】:

  • 该按钮是一个取消按钮 - 它上面的动画应该指示进度(它应该移动,这样用户就不会认为程序崩溃了)。按钮在后台工作时可见,并且正在触发 cancelasync 方法。
  • 你不想要一个字幕模式的进度条吗?我见过使用旋转动画 gif(或其他)的应用程序,它们几乎总是看起来很业余 b/c,它们没有针对较新的操作系统主题进行适当调整。会出现一个进度条。
  • 动画放置在按钮上,符合应用设计。这真的很简单,所以它应该适合不同的操作系统主题,但当然,如果我无法解决这个问题,我会转向进度条选项:)

标签: c# animation button gif animated-gif


【解决方案1】:

只是给大家的一个注释。如果在 .Image 属性上使用 Gif 动画,而不是在 .BackGroundImage 属性上使用,则 Gif 动画将自动播放。以防万一有人这样尝试。

【讨论】:

  • Jon 代码中的 AND:this.Button4.BackgroundImageLayout 不会影响 .Image 的布局...因为它们是完全不同的属性...
【解决方案2】:

为此,您需要执行以下操作:

  1. 将 BackGroundImageLayout 属性设置为 Center。该属性默认设置为 Tile。

  2. 将按钮的 Image 属性设置为动画 GIF。

这会起作用,因为我测试过它,它对我有用。

编辑:下面发布的设计器代码:

 this.Button4.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center;
 this.Button4.Image = (System.Drawing.Image)resources.GetObject("Button4.Image");
 this.Button4.Location = new System.Drawing.Point(220, 329);
 this.Button4.Name = "Button4";
 this.Button4.Size = new System.Drawing.Size(81, 68);
 this.Button4.TabIndex = 4;
 this.Button4.Text = "Button4";
 this.Button4.UseVisualStyleBackColor = true;

【讨论】:

  • 不幸的是,它对我不起作用。也许是 gif 格式的原因(因为当我在预览中添加资源时,动画也不是应有的方式,但在浏览器中它可以正常工作)
  • 奇怪的是它不适合你。如果你想把 GIF 放到网上某个地方,我可以看看。
  • 您需要在 2 页上点击 sms_sending3.gif。如果你需要,我可以把它放在英文网站上。
  • 我用你的 GIF 试过了,它对我很有效。我在顶部添加了我的设计器代码。
  • 我的代码看起来一样,但是你能在ie中打开我的gif并告诉我有什么不同吗?在即图像顶部的那些箭头(三角形)应该从右到左出现,然后从右到左消失。在我的按钮上,它们从右到左出现,但一起消失(一次)。
【解决方案3】:

我已经开始工作了。

2 件事中有 1 件对我有用:

  1. 我已经重新编辑了 gif,将属性添加到每一帧以取消绘制自身。

  2. 我改了VS的版本(我用的是免费的专业学生版,现在我 m 使用 MSDN 订阅中的一个)

感谢大家的意见。它引导我得出结论,VS 本身可能有问题,而不是我的编程风格:)

【讨论】:

    【解决方案4】:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Media;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            SoundPlayer sp = new SoundPlayer(@"1.wav");
            SoundPlayer s = new SoundPlayer(@"2.wav");
    
            private System.Windows.Forms.Label[] arLabel;
            int temp = 10;
            int help = 0;
            int r = 0, b = 0, a, tem = 0;
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
    
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                f1();
            }
    
              private void arLabel_Click(object sender, System.EventArgs e)
            {
                Label myButton = (Label)sender;
    
    
                if (myButton.Text == "")
                {
    
                    myButton.ForeColor = System.Drawing.Color.Red;
    
    
    
                    sp.Play();
                    temp = 1;
    
                    myButton.Text = "x".ToString();
                    help = 0;
                    f3();
                }
                for (int i = 0; i < arLabel.Length; i++)
                {
                    if (arLabel[i].Text != "x")
                        this.arLabel[i].ForeColor = System.Drawing.Color.Green;
                }
    
                s.Play();
    //------------------------------------------------------------------------------------------------------------------------------------
    
                if (temp == 1)
                {
                    if (arLabel[6].Text == "" && arLabel[0].Text == "x" || arLabel[8].Text=="x"&&arLabel[6].Text=="")
                        arLabel[6].Text = "o".ToString();
                    else if (arLabel[4].Text == "")
                        arLabel[4].Text = "o".ToString();
                    //------------------------------------------------------------------------------------------------------------------------------------
    
                    else if (arLabel[0].Text == arLabel[1].Text && arLabel[2].Text == "")//
                        arLabel[2].Text = "o".ToString();
                    else if (arLabel[0].Text == arLabel[2].Text && arLabel[1].Text == "")//
                        arLabel[1].Text = "o".ToString();
                    else if (arLabel[1].Text == arLabel[2].Text && arLabel[0].Text == "")//
                        arLabel[0].Text = "o".ToString();
                    //------------------------------------------------------------------------------------------------------------------------------------
                    else if (arLabel[6].Text == arLabel[7].Text && arLabel[8].Text == "")
                        arLabel[8].Text = "o".ToString();
                    else if (arLabel[6].Text == arLabel[8].Text && arLabel[7].Text == "")
                        arLabel[7].Text = "o".ToString();
                    else if (arLabel[8].Text == arLabel[7].Text && arLabel[6].Text == "")
                        arLabel[6].Text = "o".ToString();
                    //------------------------------------------------------------------------------------------------------------------------------------
                    else if (arLabel[3].Text == arLabel[4].Text && arLabel[5].Text == "")
                        arLabel[5].Text = "o".ToString();
                    else if (arLabel[3].Text == arLabel[5].Text && arLabel[4].Text == "")
                        arLabel[4].Text = "o".ToString();
                    else if (arLabel[5].Text == arLabel[4].Text && arLabel[3].Text == "")
                        arLabel[3].Text = "o".ToString();
                    //------------------------------------------------------------------------------------------------------------------------------------
                    else if (arLabel[0].Text == arLabel[3].Text && arLabel[6].Text == "")
                        arLabel[6].Text = "o".ToString();
                    else if (arLabel[0].Text == arLabel[6].Text && arLabel[3].Text == "")
                        arLabel[3].Text = "o".ToString();
                    else if (arLabel[6].Text == arLabel[3].Text && arLabel[0].Text == "")
                        arLabel[0].Text = "o".ToString();
    
    
    //------------------------------------------------------------------------------------------------------------------------------------
    
                    else if (arLabel[1].Text == arLabel[4].Text && arLabel[7].Text == "")
                        arLabel[7].Text = "o".ToString();
                    else if (arLabel[1].Text == arLabel[7].Text && arLabel[4].Text == "")
                        arLabel[4].Text = "o".ToString();
                    else if (arLabel[7].Text == arLabel[4].Text && arLabel[1].Text == "")
                        arLabel[1].Text = "o".ToString();
    //------------------------------------------------------------------------------------------------------------------------------------
                    else if (arLabel[2].Text == arLabel[5].Text && arLabel[8].Text == "")
                        arLabel[8].Text = "o".ToString();
                    else if (arLabel[8].Text == arLabel[5].Text && arLabel[2].Text == "")
                        arLabel[2].Text = "o".ToString();
                    else if (arLabel[2].Text == arLabel[8].Text && arLabel[5].Text == "")
                        arLabel[5].Text = "o".ToString();
                    //------------------------------------------------------------------------------------------------------------------------------------
                    else if (arLabel[0].Text == arLabel[4].Text && arLabel[8].Text == "")
                        arLabel[8].Text = "o".ToString();
                    else if (arLabel[0].Text == arLabel[8].Text && arLabel[4].Text == "")
                        arLabel[4].Text = "o".ToString();
                    else if (arLabel[8].Text == arLabel[4].Text && arLabel[0].Text == "")
                        arLabel[0].Text = "o".ToString();
                    //------------------------------------------------------------------------------------------------------------------------------------
                    else if (arLabel[2].Text == arLabel[4].Text && arLabel[6].Text == "")
                        arLabel[6].Text = "o".ToString();
                    else if (arLabel[2].Text == arLabel[6].Text && arLabel[4].Text == "")
                        arLabel[4].Text = "o".ToString();
                    else if (arLabel[4].Text == arLabel[6].Text && arLabel[2].Text == "")
                        arLabel[2].Text = "o".ToString();
                    //------------------------------------------------------------------------------------------------------------------------------------
                    else 
                        for (int i = 0; i < 9; i++)
                        {
                            if (arLabel[8].Text == "")
                            {
                                arLabel[8].Text = "o".ToString();
                                break;
                            }
                            else if (arLabel[7].Text == "")
                            {
                                arLabel[7].Text = "o".ToString();
                                break;
                            }
                            else if (arLabel[6].Text == "")
                            {
                                arLabel[6].Text = "o".ToString();
                                break;
                            }
    
     //------------------------------------------------------------------------------------------------------------------------------------
                            else if (arLabel[i].Text == "")
                            {
                                this.arLabel[i].ForeColor = System.Drawing.Color.Red;
                                arLabel[i].Text = "o";
                                break;
                            }
    
                        }
    
                }
                temp = 0;
                help = 1;
                f3();
    
    
    
            }
    
    
    
    
    
    
    
    
    
    
            private void f1()
            {
                this.arLabel = new Label[9];
                int b = 400;
                int c = 40;
                for (int i = 0; i < arLabel.Length; i++)
                {
                    if (i == 3 || i == 6)
                    {
                        c = c + 200;
                        b =400;
                    }
                    this.arLabel[i] = new Label();
                    this.arLabel[i].Location = new System.Drawing.Point(b, c);
                    this.arLabel[i].Size = new System.Drawing.Size(200, 200);
                    this.arLabel[i].TabIndex = i;
                    this.arLabel[i].BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
                    this.arLabel[i].Text = "".ToString();
                   arLabel[i].Click += new System.EventHandler(this.arLabel_Click);
                    this.Controls.Add(arLabel[i]);
                    this.arLabel[i].Font = new System.Drawing.Font("Modern No. 20", 120.74999F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                    this.arLabel[i].ForeColor = System.Drawing.Color.Green;
                    arLabel[i].Visible = true;
                    this.arLabel[i].BackColor = System.Drawing.Color.Khaki;
                    this.arLabel[i].BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
                    b = b + 200;
                }
            }
            private void f3()
            {
                if (arLabel[0].Text == arLabel[1].Text && arLabel[2].Text == arLabel[1].Text && arLabel[1].Text != "".ToString())
                {
                    temp = 0;
                    f2();
                }
                if (arLabel[3].Text == arLabel[4].Text && arLabel[3].Text == arLabel[5].Text && arLabel[3].Text != "".ToString())
                {
                    temp = 0;
                    f2();
                }
                if (arLabel[6].Text == arLabel[7].Text && arLabel[8].Text == arLabel[6].Text && arLabel[6].Text != "".ToString())
                {
                    temp = 0;
                    f2();
                }
                // if (arLabel[0].Text == arLabel[3].Text && arLabel[0].Text == arLabel[6].Text && arLabel[6].Text != "".ToString())
                // f2();
                if (arLabel[0].Text == arLabel[3].Text && arLabel[0].Text == arLabel[6].Text && arLabel[6].Text != "".ToString())
                {
                    f2();
                    temp = 0;
                }
                if (arLabel[1].Text == arLabel[4].Text && arLabel[4].Text == arLabel[7].Text && arLabel[7].Text != "".ToString())
                {
                    temp = 0;
                    f2();
                }
                if (arLabel[2].Text == arLabel[5].Text && arLabel[8].Text == arLabel[2].Text && arLabel[2].Text != "".ToString())
                {
                    temp = 0;
                    f2();
                }
                if (arLabel[0].Text == arLabel[4].Text && arLabel[4].Text == arLabel[8].Text && arLabel[8].Text != "".ToString())
                {
                    temp = 0;
                    f2();
                }
                if (arLabel[2].Text == arLabel[4].Text && arLabel[6].Text == arLabel[4].Text && arLabel[4].Text != "".ToString())
                {
                    temp = 0;
                    f2();
                }
            }
            private void f2()
            {
                if (help == 1)
                {
    
                    r++;
                   // label4.Text = r.ToString();
                    MessageBox.Show("THE is o");
                    f6();
                }
                else
                {
    
                    b++;
    
                  //  label5.Text = b.ToString();
                    MessageBox.Show("THE is x");
                }
    
    
                for (int i = 0; i < arLabel.Length; i++)
    
                    arLabel[i].Text = "".ToString();
                f6();
            }
            private void f6()
            {
                Random number = new Random();
                a = number.Next(0, 8);
                this.arLabel[a].ForeColor = System.Drawing.Color.Green;
                arLabel[a].Text = "o".ToString();
    
                s.PlaySync();
    
            }
        }
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 2019-07-06
      • 2012-09-03
      • 1970-01-01
      • 2015-01-27
      • 2019-03-28
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 2010-11-23
      相关资源
      最近更新 更多