2012-03-19 2 views
0

Используя этот метод:Отключение управления слишком медленно

private void disableControls() 
    { 
     foreach (Control c in this.Controls) 
     { 
      c.Enabled = false; 
     } 
    } 

В форме, которая имеет только 5 управления, почему так медленно?

Вы можете четко видеть, что каждый элемент управления отключен.

Edit:

Вот еще некоторые детали:

Единственный обработчик события у меня есть в форме, присоединенные к IndexChanged из выпадающий.

Форма, в которой я запускаю этот метод, представляет собой новую форму, вызванную из родительской формы с помощью showDialog.

Фактически, метод отключенных элементов управления является первым, что вызывается при нажатии кнопки.

Я действительно не знаю, почему это делается, я постараюсь перезагрузиться и посмотреть, станет ли это лучше.

+10

Не должно быть так медленно. У вас, очевидно, что-то происходит в другом месте вашего кода или на вашем компьютере. Требуется более подробная информация. – Chris

+0

Я не писал интересное приложение winforms в течение многих лет, поэтому не знаю ответа, но мне любопытно, есть ли у вас много вещей, которые происходят в фоновом режиме, пока вы используете это. –

+3

Почему бы просто не называть 'this.Enabled = false'? – leppie

ответ

1

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

using System; 
using System.Drawing; 
using System.Windows.Forms; 

class Test 
{ 
    static void Main() 
    { 
     Form form = new Form(); 
     for (int i = 0; i < 4; i++) 
     { 
      Button button = new Button 
      { 
       Text = "Dummy", 
       Location = new Point(10, i * 25) 
      }; 
      form.Controls.Add(button); 
     } 
     Button disabler = new Button 
     { 
      Text = "Disable", 
      Location = new Point(10, 100) 
     }; 
     disabler.Click += delegate 
     { 
      foreach (Control c in form.Controls) 
      { 
       c.Enabled = false; 
      } 
     }; 
     form.Controls.Add(disabler); 
     Application.Run(form); 
    }     
} 
Смежные вопросы