2015-09-30 3 views
-1

Я рисую что-то на своей панели с помощью метода и когда я вызываю этот метод с помощью кнопки, которую он рисует, но когда я вызываю этот метод на , он ничего не рисует. Когда я его отлаживаю, он действительно проходит через код без каких-либо проблем, но он все равно ничего не рисует.Рисунок на Form_Load C++/CLI

ниже вы можете увидеть и Button_Click события:

private: System::Void SelectElementForm_Load(System::Object^ sender, System::EventArgs^ e) 
{ 
    if (ElementList->Count > 0) 
    { 
     Index = 0; 
     DrawLinesInLayout(); 
    } 
} 

и кнопку

private: System::Void btnLeft_Click(System::Object^ sender, System::EventArgs^ e) 
{ 
    if (ElementList->Count > 0) 
    { 
     if (Index + 1 > 1) 
     { 
      Index--; 
      DrawLinesInLayout(); 
     } 
     else 
     { 
      Index = ElementList->Count - 1; 
      DrawLinesInLayout(); 
     } 
    } 
} 

Когда я использую Paint-event это работает, когда моя форма всплывает. Но потом я дважды получил код в своей программе, который не имеет смысла.

Так что мои вопросы:

  • Почему мой Form_Load не используя мой метод правильно и моя кнопка?
  • Могу ли я назвать событие Paint нажатием кнопки?
+0

Да, совершенно бессмысленно сохранять исходный код. Разделение пикселей на окно, которое еще не видно, является пустой тратой времени. Удали это. Вызовите Invalidate(), когда вам нужно, чтобы событие Paint снова запустилось. –

+0

@Hans Call Invalidate() не работает для меня, он просто перерисовывает мое первое событие «Paint». У меня есть некоторые переменные в моем событии «Paint», которое изменяется, когда я нажимаю кнопки. – Bart

+0

Решил его с помощью события 'Shown' вместо события' Load' – Bart

ответ

0

Как упоминал Ханс Пассант, вы не можете опираться на то, чего еще нет. Решение: рисовать после его создания.

Invalidate(); не работает, поскольку существуют переменные, которые меняются в методе рисования (поэтому в каждом событии вызова есть изменение Index).

Вместо использования события Load используйте событие Shown. Это начертит линии по форме:

private: System::Void SelectElementForm_Shown(System::Object^ sender, System::EventArgs^ e) 
{ 
    if (ElementList->Count > 0) 
    { 
     Index = 0; 
     DrawLinesInLayout(); 
    } 
}