Как изменить цвет рамки для картинки (winform)? - PullRequest
5 голосов
/ 13 марта 2011

Я хочу включить или выключить цвет / стиль рамки вокруг изображения в соответствии с различными событиями.

Существуют ли свойства или функции, которые помогают мне достичь этой цели?

Ответы [ 4 ]

5 голосов
/ 13 марта 2011

Winforms не позволяет изменять цвет границ элементов управления, они фиксируются темой, выбранной пользователем. Самый простой способ получить то, что вам нужно, не требуя написания собственного элемента управления, - это поместить графический блок внутрь Panel, сделав его немного меньше. Затем просто измените BackColor панели.

Дизайнер будет немного драться с вами, поскольку он пытается выровнять элементы управления по сетке, редактировать свойства Location и Size в окне Properties напрямую, а не размещать его.

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

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

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

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

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

  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 голосов
/ 14 марта 2011

Вот простой пример (в VB.NET, но он должен быть простым для преобразования), который сделает это за вас. Вам не нужно беспокоиться об использовании дополнительной панели, как при ответе Пассанта.

1 голос
/ 13 марта 2011

Если вы говорите о событиях мыши, то для этого можно использовать события MouseEnter и MouseLeave или MouseHover, а событие OnPaint можно использовать для фактического рисования. просто аннулируйте PictureBox в вышеупомянутых событиях мыши или любом другом событии, которое вас волнует.

...