Почему переключение видимости моей формы отключает мое событие KeyDown?

#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