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