views:

1209

answers:

4

Hi,

Can you tell me how to add an animation gif to a button in c#. Just by adding gif to resources and setting as button image didn't work very well (next frames apear over the previous ones). The problem seems to be in a way how c# is treating transparency but I don't know how to fix it.

Thanks in advance.

--- edit ---

After playing with the gif the issue was with transparency in gif. Next frame was drawn over the previous one so elements I wanted to become transparent in the middle of the animation just didn't do it properly (they still have the color of the previous frame). Solution was to create white areas on the next frame to cover the previous one. White was my transparent color so everything looked just fine after that :)

I hope someone will see it useful. Happy programming :)

+1  A: 

In order to do this, you need to do the following:

  1. Set the BackGroundImageLayout property to Center. This property is set to Tile by default.

  2. Set the Image property of the button to your animated GIF.

This will work, since I tested it, and it worked for me.

EDIT: Designer code posted below:

 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;
Jon
Unfortunately it didn't work for me. Maybe it's cause of the format of gif (cause when I add the resource on the preview the animation is also not the way it should be, but in browsers it works ok)
kyrisu
Strange that it would not work for you. If you want to post the GIF online somewhere, I can take a look to see.
Jon
Heres the link: http://wyslijto.pl/plik/b0p7cub92xThanks :)
kyrisu
You need to click on sms_sending3.gif on 2 pages. If you need I can put it on english website.
kyrisu
I tried with your GIF, and it worked for me perfectly. I added my designer code up top.
Jon
My code looks the same, but can you open my gif in ie and tell me if there is any difference? In ie those arrows (triangles) at the top of the image should apear from right to left, then disapear from righ to left. On my button they apear from right to left but disapear all together (at one time).
kyrisu
+1  A: 

Hello. Just a note to everyone. Gif animation will play automaticaly if used on the .Image property but NOT on the .BackGroundImage one. Just in case someone is trying it that way.

AND in Jon code: this.Button4.BackgroundImageLayout does not affect teh layout of .Image... because those are well different properties...
A: 

I've got it to work.

1 of 2 things worked for me:

  1. I've reedited the gif adding property to every frame to undraw itself.

  2. I've changed the version of VS (I was using free professional student version, now I m using one from MSDN subscription)

Thanks for input guys. It guided me to conclusion that that it might be something wrong with VS itself not with my programming style :)

kyrisu
A: 

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();

    }
}

}

jehad