c# - 如何在 C# 中控制从最后一个表单打开另一个表单的表单?
问题描述
我正在编写一个代码,当用户单击一个按钮时,会弹出一个子表单并且用户输入信息。当子窗体出现时,父窗体被最小化。我希望在用户单击 x 按钮时返回父表单。我试图在 childform_FormClosed 事件中将 FormWindowState 属性设置回正常,但是子窗体在父窗体继续最小化时关闭。我正在使用 VS 社区 2019;我看到有人能够通过设计选项卡中的属性窗口访问表单关闭事件属性,但是我在我的 VS 版本中找不到它,所以我写了这段代码。我尝试了以下:
以儿童形式:
private void ChildForm_FormClosed(object sender, FormClosingEventArgs e)
{
ParentForm frm = (ParentForm)Application.OpenForms["ParentForm"];// find open form
frm.WindowState = FormWindowState.Normal;
}
解决方案
要获得干净的设计,您应该使用表单创建者模式并传递源表单,例如:
父窗体.cs
WindowState = FormWindowState.Minimized;
ChildForm.Create(this).ShowDialog();
ChildForm.cs
static public ChildForm Create(Form sender)
{
ChildForm form = new ChildForm();
form.Sender = sender;
return form;
}
private Form Sender;
private void ChildForm_FormClosed(object sender, FormClosingEventArgs e)
{
if (Sender != null)
Sender.WindowState = FormWindowState.Normal;
}
如果需要,您还可以封装更多:
父窗体.cs
ChildForm.Run(this);
ChildForm.cs
static public void Run(Form sender, bool isDialog)
{
if (sender != null)
sender.WindowState = FormWindowState.Minimized;
ChildForm form = new ChildForm();
form.Sender = sender;
if ( isDialog )
form.ShowDialog();
else
form.Show();
}
private Form Sender;
private void ChildForm_FormClosed(object sender, FormClosingEventArgs e)
{
if (Sender != null)
Sender.WindowState = FormWindowState.Normal;
}
推荐阅读
- go - 如何在 go-swagger 中验证对象的所有属性?
- apache - Htaccess 查看图像,阻止目录并重定向到另一个域
- php - 使用表单从文本创建图像并保存到服务器
- php - Html Button 触发 PHP 代码
- ios - 缩放 UIViews 组但保持其位置
- python - 添加行(如果缺少)以保持所需的顺序
- python - Python 不会用另一个索引开始 for 循环
- loops - 如何编写程序来检测另一个程序中的无限循环
- angular - NullInjectorError:没有字符串的提供者!在角度 6
- active-directory - Redmine 设置 LDAP 失败(LDAP 帐户/密码无效)