C# 执行ShowDialog方法时为父窗体设置不透明度

C# 执行ShowDialog方法时为父窗体设置不透明度,c#,winforms,C#,Winforms,我有5个表单(c#winforms),我的应用程序只使用一个表单作为父表单,所有子表单都通过按需调用ShowDialog方法来显示。我希望对焦子窗体,在为任何子窗体调用ShowDialog方法之前,我将不透明度设置为0.83,然后将其重置为1。但我需要在所有地方都这样做。有什么常见的方法可以实现这一点吗?将逻辑封装在单个方法中,并始终使用该方法调用您的子表单,例如- public void ShowChildForm() { this.Opacity = 0.83; // show

我有5个表单(c#winforms),我的应用程序只使用一个表单作为父表单,所有子表单都通过按需调用ShowDialog方法来显示。我希望对焦子窗体,在为任何子窗体调用ShowDialog方法之前,我将不透明度设置为0.83,然后将其重置为1。但我需要在所有地方都这样做。有什么常见的方法可以实现这一点吗?

将逻辑封装在
单个方法中,并始终使用该方法调用您的子表单,例如-

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方法时,我不希望父窗体具有不透明度。