我想创建随机绘图颜色。 有一个错误。 你能帮我解决一下这段代码吗?

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

===============>>#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 票数:3 已采纳

我没有看到上述代码有任何问题,除了在调用之前没有初始化Random对象。 也绝对不需要在表单的Load事件中初始化它; 它可以在声明时正确完成:

private static readonly Random Random = new Random();

就个人而言,我不会在本地范围内声明它,据我所知,如果你这样做,你每次都会得到相同的价值。 我个人也不认为需要过于复杂的事情; 每次生成随机数并使用Color.FromAgb()方法你应该没问题。

===============>>#3 票数: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;
    }

===============>>#4 票数:1

错误在这里

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

你需要转换random.Next(0, 255)执行this (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 unchecked | 255 << 24部分用于避免透明颜色。

===============>>#6 票数:1

MainForm_Load可以创建random之前调用brushGet

===============>>#7 票数: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));

         }
     }
 }

  ask by Hzyf translate from so

未解决问题?本站智能推荐:

关注微信公众号