2011-12-11 48 views
9

Tôi đang dò tìm để tạo các màu vẽ ngẫu nhiên. Có lỗi. Bạn có thể giúp tôi về mã này không.Tạo các màu ngẫu nhiên (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

Không phải là điều thú vị để đoán, nhưng hãy làm ơn cho chúng tôi và cho chúng tôi biết lỗi là gì. –

+0

System.NullReferenceException – Hzyf

+1

Đó là một sự khởi đầu. Trên dòng/phương thức nào? –

Trả lời

3

Tôi không thấy bất kỳ sự cố nào với mã ở trên, ngoài đối tượng Ngẫu nhiên không được khởi tạo trước khi được gọi đến. Cũng hoàn toàn không cần khởi tạo nó trong sự kiện Load của form; nó có thể được thực hiện ngay khi nó được khai báo:

private static readonly Random Random = new Random(); 

Cá nhân tôi không khai báo trên phạm vi địa phương, theo tôi biết bạn kết thúc với cùng một giá trị mỗi khi bạn đi theo cách đó. Cá nhân tôi cũng không thấy nhu cầu của những điều quá phức tạp; tạo ra các số ngẫu nhiên mọi lúc và sử dụng phương thức Color.FromAgb() bạn sẽ ổn.

1

tôi đoánbrushGet được gọi trước khi MainForm_Load có thể đã tạo ra 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

Lỗi là ở đây

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

Bạn cần phải cast random.Next(0, 255) làm điều này (byte)random.Next(0, 255), và FromArgb nhu cầu 4 thông số.

+2

' Color.FromArgb' đã bị quá tải chấp nhận 3 tham số int cho R, G và B kể từ buổi bình minh của thời gian/.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

Một giải thích nhỏ sẽ làm tăng chất lượng câu trả lời của bạn. – m02ph3u5

2

này Làm việc cho tôi (tại GetRandomColor):

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

Nó phải là FromArgb, notFromRgb (Visual Studio 2015) –

+0

Thx. Chỉnh sửa ngay! – GabrielTK

1

Tạo 3 số ngẫu nhiên và tính toán số nguyên màu sắc có thể tránh được:

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); } 

Phần unchecked | 255 << 24 được sử dụng để tránh màu trong suốt.