除了当前打开的对话框之外,我想将我的 winform 应用程序全部“变灰”,这可能吗?
问问题
1241 次
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 回答