灰色的winform应用程序除了打开对话框

时间:2013-05-23 18:32:00

标签: c# .net windows winforms

除了当前打开的对话框,我想“灰显”我的winform应用程序,这可能吗?

2 个答案:

答案 0 :(得分:2)

您应该使用ShowDialog()代替Show()。这将禁用除新窗口之外的所有其他窗口。

要在视觉上“灰显”,您必须手动设置form.Enabled=false;并在对话框关闭后将其还原(由于ShowDialog()是阻止调用,因此不会太难)。

答案 1 :(得分:0)

有点曲折,但它似乎模拟了“灰色”的感觉。您需要使用表单deactivate事件和表单activate事件。您可以使每个表单都继承自此类。它似乎没有损害性能。

public class GrayingOutForm : Form
{
    public GrayingOutForm()
    {
        this.Activated += this.Form1_Activated;
        this.Deactivate += this.Form1_Deactivate;
    }

    private readonly List<Control> _controlsToReEnable = new List<Control>() ;
    private void Form1_Activated(object sender, EventArgs e)
    {
        foreach (var control in _controlsToReEnable)
            control.Enabled = true;

    }

    private void Form1_Deactivate(object sender, EventArgs e)
    {
        _controlsToReEnable.Clear();
        foreach (var control in this.Controls)
        {
            var titi = control as Control;
            if (titi != null && titi.Enabled)
            {
               titi.Enabled = false;//Disable every controls that are enabled
               _controlsToReEnable.Add(titi);  //Add it to the list to reEnable it after
            }
        }
    }
}

现在你可以在你的窗户之间自由移动,每个窗口似乎都会停用。