2017-03-11 5 views
-3

Ich mag würde in einem mit dem folgenden Code PictureBoxC# Picturebox ziehen Zufall Kreis

Ich habe versucht, einen Kreis an einer beliebigen Position ziehen, zu tun:

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

Dies ist jedoch im Kreis führt " Springen "herum in der . Ich bin verwirrt, warum das so ist.

Ich möchte die Position einmal am Anfang meines Programms bestimmen und sie an dieser Stelle ständig zeichnen.

Antwort

0

Kiste eine Variable der Zufallszahlen nach Programm laden und diese Werte verwenden, wenn Sie malen.

0

Versuchen Sie, diese Art und Weise:

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); 
    } 
+0

Nice touch und fügen hinzu, den c-Präfix zu dem (jetzt gloabal) Variablen. Sie beschreiben aber immer noch nicht die Breite und Höhe der Ellipse ... – MrPaulch

+0

Vorgesehene Form ist ein Kreis, keine Ellipse. –

+0

Ein Kreis ist nur ein Sonderfall einer Ellipse. – MrPaulch

0

Sie scheinen ein Missverständnis zu haben, wann die pictureBox1_Paint Methode aufgerufen wird.

In der Tat heißt es jedes Mal, dass die PictureBox lackiert werden muss. Dies kann bei mehreren Gelegenheiten auftreten, wie z. B .:

  • Ändern der Größe der PictureBox und/oder der übergeordneten Steuerung.

  • Der Schwerpunkt liegt auf dem Elternsteuerelement.

  • Ein Aufruf PictureBox.Invalidate()

Je nach Umständen kann es oft pro scond aufgerufen werden.

Wie der Code strukturiert ist, wird die Position für den Kreis jedes Mal neu berechnet, wenn die Methode Paint aufgerufen wird.

Sie sollten über eine Möglichkeit nachdenken, die Position einmal zu berechnen und diese Positionen in der Paint-Methode wiederzuverwenden.

Zum Beispiel:

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