C # Обновить / перерисовать форму при обновлении настроек в диалоговом окне - PullRequest
2 голосов
/ 16 декабря 2009

У меня есть приложение C # Win Forms, где я динамически рисую кнопки на панели на основе 2 свойств в классе. Ряды и колонны.

У меня также есть диалоговое окно, которое устанавливает эти свойства, используя 2 текстовых поля.

У меня есть кнопка в этом диалоговом окне, называемая «сохранить», которая после нажатия обновляет свойства (строки, столбцы) в главном классе до любых заданных значений.

Я хочу, чтобы основная форма перерисовывала динамически нарисованные кнопки на основе новых примененных настроек (строк и столбцов). Как я могу это сделать?

редактирование:

Обновление не работает.

Еще одно, возможно, важное замечание: динамическое рисование кнопок происходит в методе «Form1_Load».

Ответы [ 3 ]

4 голосов
/ 16 декабря 2009

У вас есть три основных способа заставить элемент управления перерисовывать себя: Refresh (), Update () и Invalidate (). Как указывает Адам Робинсон, самый простой способ включить пользовательскую рисование - переопределить событие Paint. Положите всю логику рисования здесь. Используйте объект Graphics, предоставленный параметром PaintEventArgs.

Так в чем же разница между вышеуказанными звонками?

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

Обновление заставляет элемент управления немедленно перерисовываться, если какие-либо части были признаны недействительными.

Обновить приводит к тому, что элемент управления становится недействительным, а затем обновляется (т.е. немедленно перерисовывается).

Я бы сказал, что это хорошая привычка - использовать Invalidate (), если у вас нет особых потребностей. В большинстве случаев это сделает вашу программу более эффективной. Если вы сделаете это, вам даже не понадобится логика рисования в вашем событии load Вполне возможно, что это перезаписывается и становится недействительным до того, как вы даже видите свою форму, в зависимости от того, что еще вы делаете в событии Load.

0 голосов
/ 16 декабря 2009

Вы не должны рисовать вне события Paint формы. Вот почему форма перерисовывается неправильно. Переместите туда свой собственный чертеж, и перерисовка должна вести себя нормально.

0 голосов
/ 16 декабря 2009

Panel.Refresh ()

Принудительно перерисовывает все дочерние элементы управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...