0

我有 5 个表单(c# winforms),我的应用程序仅使用一个表单作为父表单,所有子表单都通过按需调用 ShowDialog 方法来显示。我希望让子表单成为焦点,并且在为任何子表单调用 ShowDialog 方法之前设置 Opacity = 0.83,然后将其重置为 1。但我需要在所有地方都这样做。有没有常见的方法来实现这一点?

4

3 回答 3

2

Encapsulate中的逻辑single method并始终使用该方法来调用您的子表单,例如-

public void ShowChildForm()
{
   this.Opacity = 0.83;
   // show dialog logic here
   this.Opacity = 1.0;
}
于 2013-06-02T11:40:15.680 回答
0

这是我一直在寻找的答案,

 public DialogResult ShowChildForm(Form childForm)
{
      this.Opacity = 0.83;
      DialogResult dr = childForm.ShowDialog();
      this.Opacity = 1.0;
      return dr;
}
于 2013-06-02T11:58:11.423 回答
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;
    }


}
于 2013-06-02T11:59:43.650 回答