2011-05-09 82 views
5

Tengo muchas imágenes y coordenadas de ellas con ancho y alto. Se coloca una imagen en una caja de imágenes y envío las coordenadas para dibujar el rectángulo sobre ella. Hay muchas pictureboxes en un panel.C# dibujando un rectángulo en un cuadro de imagen?

Envié sus rutas a una clase PicturePanel también con algunas coordenadas y propiedades de ancho/alto para dibujar un rectángulo. Sin embargo, mi problema es que lo dibuja y lo elimina de inmediato. Si no coloco un cuadro de mensaje después de cada imagen, no veo los rectángulos. Aquí está el código;

if (IsRun()) 
{ 
    MessageBox.Show("rontool true"); 

    Rectangle ee = drawARectangle(xCoor, yCoor, MainScreen.tempR.wid/ratioOfx, MainScreen.tempR.heig/ratioOfy); // I wrote this, it only creates and returns the rectangle. 
    //MessageBox.Show("x : " + xCoor + " y: " + yCoor + " width : " + (MainScreen.tempR.wid/ratioOfx) + " height: " + (MainScreen.tempR.heig/ratioOfy)); 
    using (Pen pen = new Pen(Color.Red, 2)) 
    { 
     pictureBox.CreateGraphics().DrawRectangle(pen, ee); 
     // e.Graphics.DrawRectangle(pen, ee); 
    } 
} 

Esto está en

private void PictureBox_Paint(object sender, PaintEventArgs e). 

Un bucle es en otra clase, crea un cuadro de imagen, e inicializa su x, y etc. Sin embargo, se dibuja y inmediatamente lo elimina. o a veces ni siquiera dibuja.

Si no coloco un cuadro de mensaje después de cada imagen, ni siquiera veo los rectángulos. ¿Me puedes ayudar?

Respuesta

3

El método de pintura cuadro de imagen se está llamando cada vez que Windows se quiere Pinta tu cuadro de imagen. Parece que solo dibujas el rectángulo algunas veces.

if (IsRun()) 

Cambie su código para hacer siempre su dibujo.

es decir, este código no dibujará un rectángulo. donde el ejemplo de Ben lo hará.

private bool _once = true; 

     private void pictureBox1_Paint(object sender, PaintEventArgs e) 
     { 
      if (_once) 
      { 
       Rectangle ee = new Rectangle(10, 10, 30, 30); 
       using (Pen pen = new Pen(Color.Red, 2)) 
       { 
        e.Graphics.DrawRectangle(pen, ee); 
       } 
       _once = false; 
      } 
     } 
3

No estoy seguro de entender completamente su pregunta, pero si lo que quieres es dibujar un rectángulo, el siguiente código haré:

Private void pictureBox_Paint(object sender, PaintEventArgs e) { 
     Rectangle ee = new Rectangle(10, 10, 30, 30);   
     using (Pen pen = new Pen(Color.Red, 2)) { 
      e.Graphics.DrawRectangle(pen, ee); 
     } 
    } 
+0

Lo llamo en un ciclo for para que los rectángulos desaparezcan. – Ada

+0

Deberá mostrar más código de lo que ha hecho en su pregunta. Más específicamente, qué está sucediendo en ese ciclo. – Ben

0

Consulte el código a continuación. Agregué un rectángulo en lugar de una imagen solo para demostrar el código:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     const int ROWS = 3; 
     const int COLUMNS = 4; 
     const int WIDTH = 10; 
     const int HEIGHT = 20; 
     const int SPACE = 10; 
     public Form1() 
     { 
      InitializeComponent(); 
      Panel panel = new Panel(); 
      panel.Width = COLUMNS * (WIDTH + SPACE); 
      panel.Height = ROWS * (HEIGHT + SPACE); 
      this.Controls.Add(panel); 
      for (int rows = 0; rows < ROWS; rows++) 
      { 
       for (int cols = 0; cols < COLUMNS; cols++) 
       { 
        PictureBox newPictureBox = new PictureBox(); 
        newPictureBox.Width = WIDTH; 
        newPictureBox.Height = HEIGHT; 
        newPictureBox.Top = rows * (HEIGHT + SPACE); 
        newPictureBox.Left = cols * (WIDTH + SPACE); 
        panel.Controls.Add(newPictureBox); 
        newPictureBox.Paint +=new PaintEventHandler(pictureBox_Paint); 

       } 
      } 
     } 
     private void pictureBox_Paint(object sender, PaintEventArgs e) { 
      Rectangle ee = new Rectangle(0, 0, WIDTH, HEIGHT);   
      using (Pen pen = new Pen(Color.Red, 2)) { 
       e.Graphics.DrawRectangle(pen, ee); 
      } 
     } 
    } 
} 
Cuestiones relacionadas