2014-10-04 3 views
1

В случае pictureBox1 краски я попытался нарисовать прямоугольник вокруг изображения в pictureBox1:Как я могу нарисовать прямоугольник вокруг границ pictureBox1?

private void pictureBox1_Paint(object sender, PaintEventArgs e) 
     {   
       e.Graphics.DrawRectangle(new Pen(Brushes.Red, 5), new Rectangle(0, 0, pictureBox1.Image.Width, 
        pictureBox1.Image.Height));   
     } 

Но что я получаю это:

Rectangle around image

И я также попытался нарисовать прямоугольник aorund pictureBox1 it self:

private void pictureBox1_Paint(object sender, PaintEventArgs e) 
     { 
      e.Graphics.DrawRectangle(Pens.Green, 0, 0 
            , pictureBox1.Width, pictureBox1.Height); 
     } 

Но в этом случае я получаю толстую зеленую линию o влево и сверху справа и снизу без зеленого.

Rectangle around pictureBox

pictureBox1 в Desinger это свойство SizeMode устанавливается в StretchImage Как я рисовать прямоугольники в обоих случаях?

И как свойство верхней строки, которую я назвал? Это не высота, может быть, верх? Если я хочу найти и нарисовать только в верхней части pictureBox, как он называется?

+2

Используйте второй пример кода, но уменьшите расположение ширины и высоты прямоугольника с -1 или меньше. 'e.Graphics.DrawRectangle (Pens.Green, 0, 0 , pictureBox1.Width - 1, pictureBox1.Height - 1);' – Measuring

ответ

1

Чтобы нарисовать внутри PictureBox легко:

private void pictureBox1_Paint(object sender, PaintEventArgs e) 
{ 
    float penWidth = 5F; 
    Pen myPen = new Pen (Brushes.Red, (int)penWidth); 
    e.Graphics.DrawRectangle(myPen, penWidth/2F, penWidth/2F, 
          (float)pictureBox1.Width - 2F * penWidth, 
          (float)pictureBox1.Height - 2F * penWidth); 

    myPen.Dispose(); 
} 

Чтобы нарисовать вне PictureBox вы должны знать, какой контроль находится под ним. например, если это ваша формы затем использовать формы краски:

private void Form1_Paint(object sender, PaintEventArgs e) 
{ 
    int lineWidth = 5; 
    Brush myBrush = new SolidBrush (Color.Green); 
    e.Graphics.FillRectangle(myBrush, pictureBox1.Location.X - lineWidth, 
      pictureBox1.Location.Y - lineWidth, pictureBox1.Width + 2 * lineWidth, 
      pictureBox1.Height + 2 * lineWidth); 

    myBrush.Dispose(); 
} 

Я использую FillRectangle, потому что часть, которая находится под PictureBox не видна и легче контролировать ширину.

Смежные вопросы