C#Picturebox绘制随机圆圈

时间:2017-03-11 09:17:10

标签: c#

我想在PictureBox

中的随机位置画一个圆圈

我尝试使用以下代码执行此操作:

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    Random random = new Random();
    int width = random.Next(0, 400);
    int height = random.Next(0, 400);
    e.Graphics.FillEllipse(Brushes.Red, width, height, 25, 25);
}
然而,这会导致圈子跳跃"在PixtureBox周围。 我很困惑为什么会这样。

我想在我的程序开始时确定一次位置并不断地在该位置绘制它。

3 个答案:

答案 0 :(得分:0)

在程序加载时创建随机数的变量,并在绘制时使用这些值。

答案 1 :(得分:0)

尝试这种方式:

    int cwidth = new Random().Next(0, 400);
    int cheight = new Random().Next(0, 400);

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
        e.Graphics.FillEllipse(Brushes.Red, cwidth, cheight, 25, 25);
    }

答案 2 :(得分:0)

您似乎对何时调用pictureBox1_Paint方法存在误解。

事实上,每次需要绘制PictureBox时都会调用它。这可以在许多场合发生,例如:

  • 调整PictureBox和/或父控件的大小。

  • 失去/重点关注家长控制。

  • 致电PictureBox.Invalidate()

根据具体情况,可能会多次调用每秒

您的代码的结构方式,每次调用Paint方法时,都会重新计算圆的位置。

您应该考虑一种计算位置的方法,并在Paint方法中重用这些位置。

例如:

public class MyForm {
    // A global variable to hold the position 
    private Rectangle _circleShape;

    // You can create this method via the Designer by
    //  double-clicking on the Form
    public void MyForm_Load(object sender, EventArgs e) {
        Random random = new Random();

        int x = random.Next(0, 400);
        int y = random.Next(0, 400);
        int width = 25; // fixed width
        int height = 25; //  and height

        // Assign the result to your "global" variable
        _circleShape = new Rectangle(x, y, width, height);
    }

    private void pictureBox1_Paint(object sender, PaintEventArgs e) {
        // Only do the actual "drawing" in this method
        e.Graphics.FillElipse(Brushes.Red, _circleShape);
    }