C# 创建随机颜色(System.Drawing.Color)
我正在尝试创建随机绘制颜色。有一个错误。你能帮我查一下这个密码吗C# 创建随机颜色(System.Drawing.Color),c#,asp.net,C#,Asp.net,我正在尝试创建随机绘制颜色。有一个错误。你能帮我查一下这个密码吗 private Random random; private void MainForm_Load(object sender, EventArgs e) { random = new Random(); } private Color GetRandomColor() { retur
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;
}
我猜测
brushGet
在MainForm\u Load
之前被调用可能已经创建了random
除了在调用之前没有初始化随机对象之外,上述代码没有发现任何问题。也绝对不需要在表单的加载事件中初始化它;如果声明:
private static readonly Random Random = new Random();
就我个人而言,我不会在局部范围内声明它,据我所知,如果这样做,每次都会得到相同的值。我个人也不认为有必要将事情过度复杂化;每次使用Color.FromAgb()
方法生成随机数时,您应该不会有问题。错误在这里
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;
}
return Color.FromArgb(random.Next(0,255), random.Next(0,255), random.Next(0,255));
您需要强制转换随机。下一步(0255)
执行此操作(字节)随机。下一步(0255)
,
而来自argb的需要4个参数 这对我很有效(在GetRandomColor):
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));
}
}
}
可以避免生成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); }
静态随机=新随机();
Color GetRandomColor(){返回Color.FromArgb(未选中(random.Next())| 255猜起来并不有趣,但请帮我们一个忙,告诉我们错误是什么。System.NullReferenceException这是一个开始。在哪一行/以什么方法?可能在调用GetRandomColor之前没有初始化随机数。使用private Random Random=new Random()@nonnb良好调用。还可能指出,您最好将字段标记为static
,以便在第一次引用类时初始化该字段,并且在整个程序中使用相同的RNG实例。然后将您的注释作为答案发布。:)一点解释会提高你的答案的质量。Color.FromArgb
有一个重载,从时间的黎明开始接受R、G和B的3个int参数。/.NET 1.1它应该是来自Argb,而不是来自RGB(Visual Studio 2015)Thx。现在编辑!
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); }