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

时间:2013-06-02 11:33:51

标签: c# winforms

我有5个表单(c#winforms),我的应用程序只使用一个表单作为Parent,所有子表单都是通过按需调用ShowDialog方法显示的。我希望将子窗体设置为焦点,并且在为任何子窗体调用ShowDialog方法之前设置Opacity = 0.83,然后将其重置为1.但我需要在所有位置执行此操作。有没有通用的方法来实现这个目标?

3 个答案:

答案 0 :(得分:2)

Encapsulate single method中的逻辑并始终使用该方法调用您的孩子形成类似的内容 -

public void ShowChildForm()
{
   this.Opacity = 0.83;
   // show dialog logic here
   this.Opacity = 1.0;
}

答案 1 :(得分:0)

这是我正在寻找的答案,

 public DialogResult ShowChildForm(Form childForm)
{
      this.Opacity = 0.83;
      DialogResult dr = childForm.ShowDialog();
      this.Opacity = 1.0;
      return dr;
}

答案 2 :(得分:0)

您可以在Parent窗体中订阅ChildForm的Load和Closed事件,如下所示:

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


}