No więc chciałem, by po najechaniu na button, on powoli się rozjasniał. I zrobiłem sobie taki kod, tylko robią się problemy, bo tych buttonów u mnie jest bardzo dużo - jest to gra Saper.
Fragmenty kodu odpowiedzialne za rozjaśnianie:
Bitmap[] obrazki = new Bitmap[255];
//W Form_Load następujące rzeczy sie dzieja:
for (int i = 0; i < obrazki.Length; i++)
{
obrazki[i] = SetOpacity(Properties.Resources.button, i);
}
//teraz funkcja o której mowa
public Bitmap SetOpacity(Bitmap img, int opacity) // ta funkcja troche "trwa" dlatego zrobiłem sobie tablice 255 elementow z gotowymi obrazkami
{
Bitmap b = new Bitmap(img.Width, img.Height);
for (int i = 0; i < img.Width; i++)
{
for (int j = 0; j < img.Height; j++)
{
b.SetPixel(i, j, Color.FromArgb(opacity, img.GetPixel(i, j)));
}
}
return b;
}
//a teraz eventy najechania na przyciski
private void button_MouseEnter(object sender, EventArgs e)
{
Button b = (Button)sender;
if (b.Text == "")
{
b.ForeColor = Color.Black;
for (int i = 0; i < 255; i++)
{
b.Image = obrazki[i];
b.Refresh();
//System.Threading.Thread.Sleep(10);
}
}
}
private void button_MouseLeave(object sender, EventArgs e)
{
Button b = (Button)sender;
b.ForeColor = Color.White;
b.Image = null;
b.Refresh();
}
No i problem jest taki, że nie wiem jak spowolnić ten proces rozjaśniania. Widać linijkę Thread.Sleep() ale ona zawiesza wątek. Czy powinienem zrobić osobny wątek który będzie odpowiadał za rozjaśnianie? I tam dać Thread.Sleep() żeby spowolnić?
Edit: proszę jeszcze o ocenę tego sposobu zmiany przezroczystości i ewentualne sugestie, jak inaczej to rozegrać