2011-12-11 402 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部分用于避免透明的颜色。