C# 执行ShowDialog方法时为父窗体设置不透明度
我有5个表单(c#winforms),我的应用程序只使用一个表单作为父表单,所有子表单都通过按需调用ShowDialog方法来显示。我希望对焦子窗体,在为任何子窗体调用ShowDialog方法之前,我将不透明度设置为0.83,然后将其重置为1。但我需要在所有地方都这样做。有什么常见的方法可以实现这一点吗?C# 执行ShowDialog方法时为父窗体设置不透明度,c#,winforms,C#,Winforms,我有5个表单(c#winforms),我的应用程序只使用一个表单作为父表单,所有子表单都通过按需调用ShowDialog方法来显示。我希望对焦子窗体,在为任何子窗体调用ShowDialog方法之前,我将不透明度设置为0.83,然后将其重置为1。但我需要在所有地方都这样做。有什么常见的方法可以实现这一点吗?将逻辑封装在单个方法中,并始终使用该方法调用您的子表单,例如- public void ShowChildForm() { this.Opacity = 0.83; // show
将逻辑封装在单个方法中,并始终使用该方法调用您的子表单,例如-
public void ShowChildForm()
{
this.Opacity = 0.83;
// show dialog logic here
this.Opacity = 1.0;
}
这就是我一直在寻找的答案
public DialogResult ShowChildForm(Form childForm)
{
this.Opacity = 0.83;
DialogResult dr = childForm.ShowDialog();
this.Opacity = 1.0;
return dr;
}
您可以在父窗体中订阅子窗体的加载和关闭事件,如下所示:
public partial class Parent : Form
{
public Parent()
{
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
var form = new ChildForm();
form.Load += form_Load;
form.Closed += form_Closed;
base.OnLoad(e);
}
void form_Closed(object sender, EventArgs e)
{
this.Opacity = 1;
}
void form_Load(object sender, EventArgs e)
{
this.Opacity = 0.85;
}
}
我不认为这是有用的,因为5种不同形式的ShowDialog逻辑必须是不同的,所以它不是封装在一个方法中的。我可以将该方法写成,public DialogResult ShowChildForm(form childForm){this.Opacity=0.83;DialogResult dr=childForm.ShowDialog();this.Opacity=1.0;return dr;}@瓦希德-ShowDialog
有什么不同?它只是form.ShowDialog()
。Albert在评论中更正了您的答案。必须调用哪个表单的ShowDialog?我想那是隐式的
,这就是为什么我省略了ShowDialog
逻辑。您创建的每个子表单都必须订阅此事件,因此它们控制父表单的不透明度如果我调用form.Show(),会发生什么。调用show方法时,我不希望父窗体具有不透明度。