禁用控件太慢

时间:2012-03-19 17:39:52

标签: c# winforms

使用此方法:

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

在只有5个控件的表单上,为什么这么慢?

您可以清楚地看到每个控件都被禁用。

编辑:

以下是一些更多细节:

我在表单中唯一的事件处理程序绑定到comboBox的IndexChanged。

我运行此方法的表单是使用showDialog从父表单调用的新表单。

实际上,当您单击按钮时,首先调用禁用控件方法。

我真的不知道为什么会这样做,我会尝试重新启动,看看它是否会变好。

1 个答案:

答案 0 :(得分: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);
    }                   
}