在Application.Idle上悬挂控件属性,好还是坏?

时间:2011-02-15 13:50:38

标签: c# winforms

我正在使用Windows窗体上的几个控件编写一个简单的应用程序。我需要根据文本框和列表框的状态监视按钮的状态(启用/禁用)。

例如,当列表框为空时,将禁用“删除”,“全部删除”和“编辑”按钮,或者当文本框或列表框为空时,按钮“前进”将被禁用,依此类推。

所以,我把这些属性的更改放在Application.Idle事件上,所以它是这样的:

    private void MainForm_Load(object sender, EventArgs e)
    {
        Application.Idle += new EventHandler(Application_Idle);
    }

    public void Application_Idle(object sender, EventArgs e)
    {
        CheckFillingFields(forwardBtn);
        CheckFillingList(deleteBtn);
        CheckFillingList(deleteAllBtn);
        CheckFillingList(editBtn);
    }

    private void CheckFillingFields(object sender)
    {
        if (questionTxt.Text == "" || answersLst.Items.Count == 0)
            (sender as Button).Enabled = false;
        else
            (sender as Button).Enabled = true;
    }

    private void CheckFillingList(object sender)
    {
        if (answersLst.Items.Count == 0)
            (sender as Button).Enabled = false;
        else
            (sender as Button).Enabled = true;
    }

所以,问题是 - 在这种情况下使用Application.Idle是否可以接受?或者我应该使这些属性可靠的用户操作? (例如,当用户从列表框中删除某个项目时,我应该检查它是否是最后一个项目,并禁用相应的按钮。)

非常感谢,我真的很感谢你的帮助!

1 个答案:

答案 0 :(得分:2)

简单的答案是,是的,空闲检查很糟糕,您应该重新检查控件的状态,而不是“只要有可能”。