除了当前打开的对话框,我想“灰显”我的winform应用程序,这可能吗?
答案 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
}
}
}
}
现在你可以在你的窗户之间自由移动,每个窗口似乎都会停用。