V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ElegantOfKing
V2EX  ›  C

C#中如何使用 GDI+随机生成若干个圆形?

  •  
  •   ElegantOfKing · 2015-10-27 20:10:52 +08:00 · 958 次点击
    这是一个创建于 3075 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本人最近才接触 C#编程,老师布置作业:使用 GDI+画圆,半径和颜色都要随机变化,圆要生成若干个。我参考了网上的许多资料,编写了如下代码,但是点击生成按钮,每次仍然只能生成一个圆形。各位会员能够帮我查找一下错误,或者提醒一下?万分感谢!

    private void button1_Click(object sender, EventArgs e)
            {
                Graphics p = this.CreateGraphics();
                PaintEventArgs pe = new PaintEventArgs(p, this.ClientRectangle);
                panel1_Paint(this, pe);
                p.Dispose();
            }
            private void panel1_Paint(object sender, PaintEventArgs e)
            {
                var list = new List<Rectangle>();
                var rand = new Random();
                var g = e.Graphics;
                 int N = 100; //圆的个数
                for (int i = 0; i < 1000; i++) //限定最多试探次数,以免出现死循环
                {
                  Random ran = new Random();
                int wid = Screen.PrimaryScreen.WorkingArea.Width;
                int hei = Screen.PrimaryScreen.WorkingArea.Height;
                int R1 = ran.Next(0,1000);
                int R2 = ran.Next(0,1000);
                int Rnadkey = ran.Next(20, 800);
                int Cran1 = ran.Next(0, 255);
                int Cran2 = ran.Next(0, 255);
                int Cran3 = ran.Next(0, 255);
                Brush brush = new SolidBrush(Color.FromArgb(Cran1, Cran2, Cran3));//三原色
                var rct = new Rectangle(R1, R2, Rnadkey, Rnadkey);
                if ((rct.X + 2 * rct.Width) < wid && (rct.Y + 2 * rct.Width) < hei) //判定是否超出边界
                {               
                    list.Add(rct);
                    g.FillEllipse(brush, rct);
                    continue;
                }
                if (--N == 0) break;
                }
                }
    
    7 条回复    2015-10-28 14:51:53 +08:00
    stupidcat
        1
    stupidcat  
       2015-10-27 20:31:20 +08:00

    Graphics p;
    定义为成员变量,将
    p = this.CreateGraphics();
    放在这个 Form 的构造函数里
    stupidcat
        2
    stupidcat  
       2015-10-27 20:42:50 +08:00
    务必无视上面这条。。
    abelyao
        3
    abelyao  
       2015-10-27 20:47:52 +08:00
    1. 圆形可否叠加?
    2. 圆形可否超出画布范围?
    如果都不要求… 那不就是随便画吗…
    stupidcat
        4
    stupidcat  
       2015-10-27 20:54:28 +08:00   ❤️ 1
    private void button1_Click(object sender, EventArgs e)
    {
    Graphics p = this.CreateGraphics();
    PaintEventArgs pe = new PaintEventArgs(p, this.ClientRectangle);
    panel1_Paint(this, pe);
    p.Dispose();
    }
    private void panel1_Paint(object sender, PaintEventArgs e)
    {
    var g = e.Graphics;
    var ran = new Random();

    int N = 10; //圆的个数

    while(true)
    {
    int R1 = ran.Next(0, this.Width);
    int R2 = ran.Next(0, this.Height);
    int Randkey = ran.Next(10, 200);

    if (R1 + Randkey < this.Width && R2 + Randkey < this.Height) //判定是否超出边界
    {
    var rct = new Rectangle(R1, R2, Randkey, Randkey);
    int Cran1 = ran.Next(0, 255);
    int Cran2 = ran.Next(0, 255);
    int Cran3 = ran.Next(0, 255);

    Brush brush = new SolidBrush(Color.FromArgb(Cran1, Cran2, Cran3));//三原色
    Pen pen = new Pen(brush);
    g.DrawEllipse(pen, rct);

    if (--N == 0)
    {
    break;
    }
    }
    }
    }
    xbb7766
        5
    xbb7766  
       2015-10-27 21:53:00 +08:00
    4 楼正解
    ElegantOfKing
        6
    ElegantOfKing  
    OP
       2015-10-28 14:25:12 +08:00
    @abelyao 是的,随便画......
    ElegantOfKing
        7
    ElegantOfKing  
    OP
       2015-10-28 14:51:53 +08:00
    @stupidcat 万分感谢!有了您的代码,加上昨天自己的修改,已经完全符合老师的要求了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3225 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 10:51 · PVG 18:51 · LAX 03:51 · JFK 06:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.