Как создать цветную рамку в элементе управления PictureBox? - PullRequest
4 голосов
/ 15 декабря 2010

У меня есть PictureBox и свойство Image в PictureBox1.Image.
Как разместить рамку вокруг изображения?

Ответы [ 4 ]

7 голосов
/ 15 декабря 2010

Вы не можете установить размер и цвет границы PictureBox.
Но вы можете сделать небольшой трюк для достижения этой цели.

Установите для вашего изображения свойство BackgroundImage.
Установите для BackgroundImageLayout значение Center.
Измените для свойства BackColor цвет, которым должна быть граница.
Теперь измените размер PictureBox достаточно, чтобы показать цвет спины, который теперь будет визуально действовать как граница.

Вы также можете использовать свойство Padding для выполнения последнего шага.

Надеюсь, это поможет.

3 голосов
/ 29 мая 2016

Это всегда было то, что я использую для этого:

Чтобы изменить цвет границы, вызовите его из обработчика событий Paint вашего элемента управления Picturebox:

private void pictureBox1_Paint_1(object sender, PaintEventArgs e)
    {
        ControlPaint.DrawBorder(e.Graphics, pictureBox1.ClientRectangle, Color.Red, ButtonBorderStyle.Solid);
    }

Для динамического изменения цвета границы, например, из события щелчка мышью, я использую свойство Tag в поле для изображения, чтобы сохранить цвет, и настраиваю событие Click в окне для изображения, чтобы получить его оттуда. Например:

if (pictureBox1.Tag == null) { pictureBox1.Tag = Color.Red; } //Sets a default color
  ControlPaint.DrawBorder(e.Graphics, pictureBox1.ClientRectangle, (Color)pictureBox1.Tag, ButtonBorderStyle.Solid);

Событие Click для Picturebox будет выглядеть примерно так:

private void pictureBox1_Click(object sender, EventArgs e)
        {
            if ((Color)pictureBox1.Tag == Color.Red) { pictureBox1.Tag = Color.Blue; }
            else {pictureBox1.Tag = Color.Red; }
            pictureBox1.Refresh();
        }

Вам понадобится using System.Drawing; в начале, и не забудьте позвонить pictureBox1.Refresh() в конце. Наслаждайтесь!

2 голосов
/ 13 ноября 2012

Вы можете создать свой собственный PictureBox, унаследовав от System.Windows.Forms.PictureBox и переопределив метод PictureBox class OnPaint, отсюда используйте класс System.Windows.Forms.ControlPaint, чтобы нарисовать вашу собственную границу с помощью метода DrawBorder и передать свой System.Windows.Forms.PaintEventArgs из метода OnPaint.

Как то так;

using System.Windows.Forms;
using System.Drawing;

public class CustomPictureBox : PictureBox
{
  protected override void OnPaint(PaintEventArgs e) 
  {
    base.OnPaint(e);
    ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle, Color.Red, ButtonBorderStyle.Solid);
  }
}

Это только быстрый пример (не проверенный), чтобы вы начали, извините, я не могу быть более тщательным.

0 голосов
/ 20 ноября 2016

Я был здесь, потому что столкнулся с той же проблемой. Я указал на более простое решение, и это.

  1. Поместите label позади picturebox.
  2. Измените цвет спины label на цвет требуемой границы.
  3. Установите для свойства label AutoSize значение false и измените размер label по своему усмотрению.

Пример:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...