none
如何使按鈕閃爍 RRS feed

  • 問題

  • 我有3個button(button1, button2, button3),當button1 click時,3個button會開始變換顏色。

    目前做法如下,現在有個問題是假設我有show MessageBox,顏色可以正常變換;

    當我槓掉MessageBox時,三個顏色就永遠保持在第一個"紅綠藍",請問是欠缺了什麼命令嗎?

    這個是不是也能利用迴圈來表示?

    private void button1_Click(object sender, EventArgs e)
              {
                button1.BackColor = Color.Red;
                button2.BackColor = Color.Green;
                button3.BackColor = Color.Blue;
                Thread.Sleep(1000);
              //MessageBox.Show("1");
                button1.BackColor = Color.Green;
                button2.BackColor = Color.Blue;
                button3.BackColor = Color.Red;
                Thread.Sleep(1000);
              //MessageBox.Show("2");
                button1.BackColor = Color.Blue;
                button2.BackColor = Color.Red;
                button3.BackColor = Color.Green;
                Thread.Sleep(1000);
              }  

    2017年6月20日 上午 05:53

解答

  • 感覺上是Refresh這觀念的問題

    我試過可以的

    在每個Thread.Sleep(1000);前面加上

    button1.Refresh();
    button2.Refresh();
    button3.Refresh();個別物件重繪

    或是

    Form1.ActiveForm.Refresh();

    表單重繪都可以

    我認為是這樣啦~若不是很正確請其他前輩指導囉~^^

    2017年6月21日 上午 01:05

所有回覆

  • 感覺上是Refresh這觀念的問題

    我試過可以的

    在每個Thread.Sleep(1000);前面加上

    button1.Refresh();
    button2.Refresh();
    button3.Refresh();個別物件重繪

    或是

    Form1.ActiveForm.Refresh();

    表單重繪都可以

    我認為是這樣啦~若不是很正確請其他前輩指導囉~^^

    2017年6月21日 上午 01:05
  • Hi 騎山豬闖紅燈,

    您的程式雖然可以執行但不會refresh 畫面,

    所以當 Thread.Sleep(1000); 時,

    只會延遲時間而出現最後一行的結果,

    此並沒有達到您希望的效果,

    可以參考一下這篇的寫法和說明 : Custom Flashing Button control.

    希望可以幫助到您 :)


    請記得將對您有幫助的回覆"標示為解答"以幫助其他尋找解答及參與社群討論的朋友們。

     

    Please remember to click Mark as Answer on the post that helps you.
    This can be beneficial to other community members reading the thread.

    2017年6月21日 上午 06:45
  • 不知道這是不是你要的效果,給你參考看看~

    需要新增一個"timer1"物件

    程式碼:

            private void button1_Click(object sender, EventArgs e)
            {
                timer1.Interval = 1000;
                timer1.Enabled = true;
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                button1.BackColor = Color.Red;
                button2.BackColor = Color.Green;
                button3.BackColor = Color.Blue;
                timer1.Stop();
                MessageBox.Show("1","",MessageBoxButtons.OK);
                timer1.Start();
                button1.BackColor = Color.Green;
                button2.BackColor = Color.Blue;
                button3.BackColor = Color.Red;
                timer1.Stop();
                MessageBox.Show("2", "", MessageBoxButtons.OK);
                timer1.Start();
                button1.BackColor = Color.Blue;
                button2.BackColor = Color.Red;
                button3.BackColor = Color.Green;
            }

    給你參考看看~

    2017年6月23日 上午 02:06