我想在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
周围。
我很困惑为什么会这样。
我想在我的程序开始时确定一次位置并不断地在该位置绘制它。
答案 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);
}