Простая графическая проблема

#c# #winforms #graphics #paint

#c# #приложения WinForms #графика #Краски #winforms

Вопрос:

Раньше мне никогда по-настоящему не приходилось беспокоиться о том, насколько «красивы» мои программы, но сейчас я работаю над кое-чем для маркетинга…. В любом случае, я предполагаю, что это довольно просто, но, похоже, я не могу понять, почему это не работает. По сути, у меня есть панель с кучей графических блоков в ней, и я рисую цветные прямоугольники за ними, чтобы создать псевдо-«рамку» вокруг фотографий. Он имеет другую рамку в зависимости от того, выбрана фотография или нет. Выбранная фотография по умолчанию находится в позиции 0, и при первом нанесении все выглядит великолепно. Но когда выделение изменяется, срабатывает событие paint, и ничего не меняется. Вот код:

 private void panelPicSet_Paint(object sender, PaintEventArgs e)
{
    Graphics g = e.Graphics;
    g.Clear(panelPicSet.BackColor);
    foreach (PictureBox picBox in panelPicSet.Controls)
    {
        if (picBox == selectedPhoto.PictureBox)
            g.FillRectangle(new SolidBrush(Color.FromArgb(53, 73, 106)), new Rectangle(new Point(picBox.Location.X - 4, picBox.Location.Y - 4), new Size(picBox.Width   8, picBox.Height   8)));
        if (picBox == hoveredPicBox)
            g.FillRectangle(new SolidBrush(Color.FromArgb(53, 73, 106)), new Rectangle(new Point(picBox.Location.X - 2, picBox.Location.Y - 2), new Size(picBox.Width   4, picBox.Height   4)));
        else
            g.FillRectangle(new SolidBrush(Color.FromArgb(255, 232, 166)), new Rectangle(new Point(picBox.Location.X - 2, picBox.Location.Y - 2), new Size(picBox.Width   4, picBox.Height   4)));
    }
}
  

Комментарии:

1. Где вы определяете переменную selectedPhoto?

2. В графическом окне щелкните событие. Наведение устанавливается в событиях ввода / вывода мыши. Оба распознаются правильно в событии рисования.

Ответ №1:

Как я и подозревал, это был простой ответ. Мне пришлось вызывать panelPicSet.Invalidate() события ввода / вывода щелчком мыши. Я предполагал, что очистка графического объекта в событии paint выполняла ту же функцию, но, по-видимому, нет.

Комментарии:

1. Рад, что вы с этим разобрались. Извините, я не мог разобраться раньше, я уклонялся от торнадо. @Bill — спасибо за голосование против — в следующий раз я обязательно отвечу, несмотря на ужасные погодные условия!