2011-12-11 383 views
9

我正在創建隨機繪製顏色。有一個錯誤。你能幫我解釋一下這段代碼嗎?創建隨機顏色(System.Drawing.Color)

 private Random random; 

     private void MainForm_Load(object sender, EventArgs e) 
     { 
      random = new Random(); 
     } 

     private Color GetRandomColor() 
     { 
      return Color.FromArgb(random.Next(0, 255), random.Next(0,255),random.Next(0,255)); 
     // The error is here 
     } 

     public SolidBrush brushGet() 
     { 
      SolidBrush oBrush = new SolidBrush(GetRandomColor()); 
      return oBrush; 
     } 
+9

這並不是說猜測並不好玩,但請幫我們一個忙,告訴我們錯誤是什麼。 –

+0

System.NullReferenceException – Hzyf

+1

這是一個開始。在什麼方式/在什麼方法? –

回答

3

我沒有看到上述代碼的任何問題,除了Random對象在被調用之前未被初始化。也絕對不需要在表單的Load事件中初始化它;這是可以做到權當它宣佈:

private static readonly Random Random = new Random(); 

我個人倒沒有宣佈它在本地範圍,因爲據我所知,你的每一次,如果你去了解這種方式結束了相同的值。我個人也不認爲需要過分複雜的事情;每次生成隨機數並使用Color.FromAgb()方法你應該沒問題。

1

brushGetMainForm_Load可能已經創建了random之前調用。

2
private Color color; 
    private int b; 
    public Color Random() 
    { 
     Random r = new Random(); 
     b = r.Next(1, 5); 
     switch (b) 
     { 
      case 1: 
       { 
        color = Color.Red; 
       } 
       break; 
      case 2: 
       { 
        color = Color.Blue; 
       } 
       break; 
      case 3: 
       { 
        color = Color.Green; 
       } 
       break; 
      case 4: 
       { 
        color = Color.Yellow; 
       } 
       break; 
     } 

     return color; 
    } 
1

的錯誤是在這裏

return Color.FromArgb(random.Next(0,255), random.Next(0,255), random.Next(0,255)); 

你需要投random.Next(0, 255)這樣(byte)random.Next(0, 255), 和FromArgb需要4個參數。

+2

'Color.FromArgb'有過載從時間的黎明開始接受R,G和B的3個int參數/ .NET 1.1 –

0
using Microsoft.VisualBasic.PowerPacks; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     Random random = new Random(); 

     public Form1() 
     {  
      InitializeComponent(); 
     } 

     private void ovalShape1_Click(object sender, EventArgs e) 
     {   
      ovalShape1.BackStyle = BackStyle.Opaque; 

      random = new Random(); 

      ovalShape1.BackColor = Color.FromArgb(random.Next(0, 255), random.Next(0, 255), random.Next(0, 255)); 

     } 
    } 
} 
+1

稍加說明可以提高答案的質量。 – m02ph3u5

2

這爲我工作(在GetRandomColor):

Random random = new Random(); 
return Color.FromArgb((byte)random.Next(0, 255), (byte)random.Next(0, 255), (byte)random.Next(0, 255)); 
+0

它應該是FromArgb,notFromRgb(Visual Studio 2015) –

+0

Thx。立即編輯! – GabrielTK

1

生成3張隨機數,並計算所述色彩整數能夠避免:

static Random random = new Random(); 

Color GetRandomColor() { return Color.FromArgb(unchecked(random.Next() | 255 << 24)); } 

Color GetRandomKnownColor() { 
    return Color.FromKnownColor((KnownColor)random.Next((int)KnownColor.YellowGreen) + 1); } 

unchecked | 255 << 24部分用於避免透明的顏色。