Обновление графики на панелях

#c# #.net #winforms #graphics

#c# #.net #winforms #графика

Вопрос:

Хорошо, я новичок в C #, и я не понимаю, как работают события. в настоящее время у меня есть панель, в которой я рисую прямоугольники. событие вызывается при инициализации панели, но я хочу вызвать его после того, как я что-то сделаю в своей таблице данных. Я просто хочу знать, как сообщить объекту об обновлении.

Разве я не использую событие в этой ситуации? Если да, то могу ли я просто создать новый графический экземпляр и запустить?

Вот мой код:

 private void panel6_Paint(object sender, PaintEventArgs e)
{
   if(dataGridView1.RowCount != 0 )
   {
      Pen lightRed = new Pen(Brushes.LightSalmon);
      lightRed.Width = 1.0F;
      lightRed.LineJoin = System.Drawing.Drawing2D.LineJoin.Miter;
      int counter = 0;
      foreach (var pair in currentPosition)
      {  
         if(dataGridView1[0, counter].Style.BackColor == Color.Red)
         {
            e.Graphics.DrawRectangle(lightRed, new Rectangle(0, currentPosition.Count / panel6.Height * counter, 66, currentPosition.Count / panel6.Height * counter));
         }
      }
      lightRed.Dispose();
   }
}
  

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

1. Пожалуйста, не добавляйте ключевое слово или тег к заголовку вашего сообщения. Вот почему у нас есть система тегов.

Ответ №1:

Всякий раз, когда вы хотите принудительно перерисовать, вызывайте:

 Invalidate();
  

…или

 Refresh();
  

Invalidate() предпочтительнее … Refresh() попытки быть более непосредственными.

Итак, для вашей панели:

 panel6.Invalidate();
  

Вы бы вызвали это в любой момент, когда хотите сообщить элементу управления, что он должен перерисовать себя. Это приведет к Paint запуску вашего события.