3

除了当前打开的对话框之外,我想将我的 winform 应用程序全部“变灰”,这可能吗?

4

2 回答 2

2

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

要在视觉上“变灰”,您必须form.Enabled=false;手动设置并在对话框关闭后恢复它(这并不难,因为ShowDialog()是阻塞调用)。

于 2013-05-23T18:35:52.973 回答
0

有点曲折,但它似乎模拟了“灰色”的感觉。您需要使用表单停用事件和表单激活事件。你可以让你的每一个表单都继承自这个类。它似乎并没有影响性能。

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
            }
        }
    }
}

现在您可以在您的窗口之间自由移动,并且每个窗口似乎都已停用。

于 2013-05-23T21:14:11.213 回答