这真是一个愚蠢的问题。这是细节。我有两个项目。
主项目有一个窗体frmStart,因此需要使用Hide。
第二个项目是一个附加了窗体的类库。
当我第一次单击按钮转到类库时,一切都很好,frmStart被隐藏了。
当我第二次调用类库时frmStart不隐藏?
frmStart将KeyPreview设置为True,并有一个用于关闭它的按钮。
我不得不在类库中为frmStart创建一个新示例,不确定这是否正确。
**我做错了什么?**frmStart代码
private void btnShowLib_Click(object sender, EventArgs e)
{
Hide();
SS = "HI we are from OneB";
var form = new CLP.form1();
form.UdpateTextBoxWith(SS);
form.Show();
}
类库中的代码
private void btnClose_Click(object sender, EventArgs e)
{
Close();
frmStart fST = new frmStart();
fST.Show();
}
1条答案
按热度按时间ohtdti5x1#
我哪里做错了?
在库中,通过执行以下操作创建并显示一个新的
frmStart
:这里的
fst
是一个完全不同的示例,而不是您认为在主项目中创建和显示的那个示例。换句话说,您在主项目中隐藏了原始示例,而在Lib项目中显示了一个新示例。您可以通过调用
Form.ShowDialog
方法来显示一个 modal 对话框,而不是调用Form.Show
方法来显示一个 non-modal 对话框,从而解决这个问题。这样,您就不需要在库的btnClose_Click
中编写任何代码,而只需要在Close();
方法中编写代码。在主项目中:
在Lib项目中:
如果您有理由显示一个 * 非模态 * 对话框,则将
frmStart
示例传递给Show
方法,然后您可以通过Form.Owner
属性访问它。请注意,处理
FormClosing
事件以显示所有者,而不是btnClose_Click
事件,因为窗体也可以通过窗体的x
控制按钮或键盘键关闭。另一种 * 非模态 * 方式是通过参数化构造函数将
frmStart
示例传递给Lib的Form,并将其赋给支持字段。主要项目: