2011-05-09 82 views
5

Tôi có nhiều hình ảnh và tọa độ của chúng với chiều rộng và chiều cao. Một bức ảnh được đặt trong một bức tượng và tôi gửi tọa độ để vẽ hình chữ nhật trên đó. Có rất nhiều pictureboxes trên một bảng điều khiển.C# vẽ hình chữ nhật trên hình tượng?

Tôi gửi đường dẫn đến lớp PicturePanel cũng với một số toạ độ và thuộc tính chiều rộng/chiều cao để vẽ hình chữ nhật. Tuy nhiên, vấn đề của tôi là, nó rút ra nó, và ngay lập tức xóa nó. Nếu tôi không đặt một hộp thư sau mỗi hình ảnh, tôi không thấy các hình chữ nhật. Đây là mã;

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

Đây là trong

private void PictureBox_Paint(object sender, PaintEventArgs e). 

Một vòng lặp for là trong lớp học khác, tạo ra một picturebox, và khởi x của nó, y vv Tuy nhiên, nó thu hút và ngay lập tức xóa nó. hoặc đôi khi nó thậm chí không vẽ.

Nếu tôi không đặt hộp thư sau mỗi hình ảnh, tôi thậm chí không thấy hình chữ nhật. Bạn có thể giúp tôi được không?

Trả lời

3

Phương pháp sơn picturebox được gọi mỗi khi Windows muốn bạn sơn hộp hình ảnh của bạn. Có vẻ như bạn chỉ vẽ hình chữ nhật một thời gian.

if (IsRun()) 

Thay đổi mã của bạn để luôn làm bản vẽ.

tức là mã này sẽ không vẽ hình chữ nhật. nơi Ben sẽ làm ví dụ.

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

Tôi không chắc chắn tôi hoàn toàn hiểu câu hỏi của bạn nhưng nếu tất cả các bạn muốn là để vẽ một hình chữ nhật, các mã sau đây sẽ làm điều đó:

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

Tôi gọi nó là vòng lặp for nên các hình chữ nhật biến mất. – Ada

+0

Bạn sẽ cần hiển thị nhiều mã hơn bạn đã thực hiện trong câu hỏi của mình. Cụ thể hơn, những gì đang xảy ra trong vòng lặp đó. – Ben

0

Xem mã bên dưới. Tôi đã thêm hình chữ nhật thay vì hình ảnh chỉ để minh họa mã:

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); 
      } 
     } 
    } 
} 
Các vấn đề liên quan