2010-09-22 97 views
1

我正在通過一本名爲Head First C#的書。它沒有解釋循環詳細說明的內容。如果有人能解釋我不明白的部分,那將是非常棒的。 我讀這個的方式只要c小於254,每次循環結束後可見c會增加1。我不明白的是(c,255-c,c)在C中解釋一個聲明#

private void button1_Click(object sender, EventArgs e) 
    { 

     while (Visible) 
     { 
      for (int c = 0; c < 254 && Visible; c++) 
      { 
       this.BackColor = Color.FromArgb(c, 255 - c, c); 
       Application.DoEvents(); 
       System.Threading.Thread.Sleep(5); 
      } 
     } 
    } 
+0

另一方面,儘管這可以很好地幫助顯示在UI中持續運行的行爲,但在實際代碼中使用DoEvents像這樣是一個非常糟糕的主意。請務必記住,這是示例代碼,並不代表創建背景顏色動畫的好方法。 – 2010-09-22 15:56:29

回答

10
this.BackColor = Color.FromArgb(c, 255 - c, c); 

The arguments to that function are red, green, blue.最大值爲255,最小值爲0 。此功能將顏色從全綠變爲綠,全紅 - 藍(洋紅)。

for (int c = 0; c < 254 && Visible; c++) 

循環將繼續,直到形式製成不可見的(假設這事件處理程序中的窗體上,Visiblethis.Visible如果表單被隱藏將是假的),或者在達到最大值( c < 254將是錯誤的)。

下面的圖表顯示了基於紅色,綠色和藍色值的常見顏色。在圖表中,格式爲RRGGBB,其中RR爲紅色值,GG爲綠色值,BB爲藍色值。數字是十六進制的(從0到FF而不是0到255)。

alt text

+0

就像旁邊一樣,'Visible'只是一個布爾值。列出的任何內容都表示它與按鈕本身的「可見」屬性有關。因此,一個更具體的終止符將會被布爾型的'Visible'通過某個動作改變爲false。 – 2010-09-22 15:26:25

+1

良好的捕獲,實際上我錯了 - 默認情況下,這將引用表單可見性而不是按鈕可見性。 – 2010-09-22 15:30:51

4

所以這是這種說法,你不明白,對吧?

this.BackColor = Color.FromArgb(c, 255 - c, c); 

這是設置BackColor屬性從Color.FromArgb方法的返回值。該方法的參數是c,255 - cc。舉例來說,如果c是100,則它將調用Color.FromArgb(100, 155, 100)

基本上這是背景色從綠色(0,255,0)變爲紫色(253,2,253)的動畫。它做它在一個非常討厭的方式,使用Application.DoEvents,使UI線程睡眠,但希望這本書將介紹一個更好的方式隨着時間的推移:)

+0

循環何時結束或將結束 – user770022 2010-09-22 15:18:24

+1

@ randywhite30 - 當c> = 254或布爾值「Visible」通過某種操作更改爲false時,它會結束 – 2010-09-22 15:27:10

+1

@ randywhite30:我認爲這是您執行的操作*瞭解... – 2010-09-22 15:32:48

1

你即將會發生什麼「C」作爲循環迭代正確。您遇到的問題是在每次迭代中創建與「c」值不同的顏色。因此,表單的背景顏色會隨着c的改變而改變。

1

該行爲的描述是錯誤的。

此例程將不斷將顏色從綠色滑動到紫色,然後將其重置爲綠色並再次執行。循環退出的唯一方式是,如果該按鈕在響應由DoEvents()調用執行的某些內容時變爲不可見。