#c# #winforms #loops #panel #visible
#c# #winforms #циклы #панель #видимый
Вопрос:
Я создаю сетку Panels
во время выполнения, и это очень некрасиво, когда она изменяется из-за создания цикла. Чтобы «скрыть» эту операцию, я вызвал
this.Visible = false;
перед моим циклом и
this.Visible = true;
после моего цикла.
for (int i = 0; i < Size; i )
{
for (int j = 0; j < Size; j )
{
_panel = new Panel();
_panel.Location = new Point((i * _panel.Size.Width) ((i 1) * _border), (j * _panel.Size.Height) ((j 1) * _border));
this.Controls.Add(_panel);
}
}
Приведенный выше код отлично работает, однако он срабатывает только один раз.
После того, как я переключаю видимость моей формы, KeyDown
событие больше не происходит при нажатии клавиши.
Есть идеи?
Комментарии:
1. установка
Visible
наfalse
приводит к тому, что форма теряет фокус. Вы уверены, что форма восстановит фокус, когда вы снова сделаете ее видимой? Также может быть, что один из элементов управления в вашей форме получаетKeyDown
события.2. можете ли вы подтвердить, что это касается Windows Forms? (Для этого есть тег)
3. @fretje Он определенно имеет в виду WinForms. Повторно пометил его.
Ответ №1:
Вы никогда не должны изменять видимость для операций обновления. Скорее используйте:
this.SuspendLayout();
// Do all the resizing here.
this.ResumeLayout();
Ответ №2:
this.Visible
это вызов на стороне сервера, который предотвращает отображение элемента управления html и всего содержимого этого элемента управления клиенту. Вы могли бы попробовать изменить стиль на style="display:none;
, чтобы все, что находится внутри этой «панели», могло быть повторно передано клиенту.
Комментарии:
1. Я думаю, что OP говорит о Windows Forms.
2. whoops…in бессмертные слова Розанны Rosannadanna Nevermind