2014-10-07 55 views
-3

所以,我試圖製作一個函數,使某個標籤成爲顏色列表中的隨機顏色。這是現在我的代碼:從數組列表中挑選隨機顏色

ArrayList colors = new ArrayList(); 
colors.Add(Color.Black); 
Random rColor = new Random(); 
var randomColor = rColor.Next(0, colors.Count); 

colorTextLabel.ForeColor = randomColor; 

,但它只是在代碼的最後一行將返回一個錯誤說「無法隱式轉換類型‘詮釋’到‘的System.Drawing.Color’」

如何這完成了嗎?

+0

哎呀對不起,這是錯誤的變量...但還是同樣的錯誤。 – ZeroByter 2014-10-07 01:09:37

+1

只是一個小建議 - 如果您要快速選擇大量的隨機顏色,您需要將Random rColor = new Random();聲明移至類級變量,以防止生成非隨機值。 – Enigmativity 2014-10-07 01:09:40

+0

爲什麼使用'ArrayList',它並不經常用於現代編程。一個'清單'會更合適。 – 2014-10-07 01:41:19

回答

3

您需要隨機指標在得到該項目,目前您正試圖爲int分配給顏色:

colorTextLabel.ForeColor = (Color)colors[randomColor]; 

永遠別用ArrayList雖然您可以使用generics

+0

這只是帶回錯誤「as運算符必須與引用類型或可爲空類型('System.Drawing.Color'是一個不可爲空的值類型)」 – ZeroByter 2014-10-07 01:15:23

+0

我忘了Color是一個結構。現在修正 – 2014-10-07 01:16:07

0

嘗試做這種方式:

var colours = 
    typeof(System.Drawing.Color) 
     .GetProperties() 
     .Where(x => x.PropertyType == typeof(System.Drawing.Color)) 
     .Select(x => x.Name) 
     .ToArray(); 

colorTextLabel.ForeColor = 
    System.Drawing.Color.FromName(colours[rColour.Next(0, colours.Length)]);  
+0

假設我不想要一些顏色,那麼除了條件 – naweez 2016-07-28 11:17:44

+0

@naweez - 在'.Select'做一個'.Where(x => x.Name!=「藍色」)''之前如何放入。 – Enigmativity 2016-07-28 12:42:37

+0

@ Enigmativety的如果顏色超過30,那麼它將很難寫入在哪裏條件。爲什麼可能是更好的解決方案。 – naweez 2016-07-28 13:45:14