#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 — спасибо за голосование против — в следующий раз я обязательно отвечу, несмотря на ужасные погодные условия!