我正在尝试创建随机绘图颜色。有一个错误。你能帮我解释一下这段代码吗?
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;
}
答案 0 :(得分:3)
我没有看到上述代码有任何问题,除了在调用之前没有初始化Random对象。也绝对不需要在表单的Load事件中初始化它;它可以在声明时正确完成:
private static readonly Random Random = new Random();
就个人而言,我不会在本地范围内声明它,据我所知,如果你这样做,你每次都会得到相同的价值。我个人也不认为需要过于复杂的事情;每次生成随机数并使用Color.FromAgb()
方法你应该没问题。
答案 1 :(得分:3)
这适用于我(在GetRandomColor):
Random random = new Random();
return Color.FromArgb((byte)random.Next(0, 255), (byte)random.Next(0, 255), (byte)random.Next(0, 255));
答案 2 :(得分: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;
}
答案 3 :(得分:1)
brushGet
创建MainForm_Load
之前,猜测 random
被调用。
答案 4 :(得分: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个参数。
答案 5 :(得分: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
部分用于避免透明色。
答案 6 :(得分: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));
}
}
}