我有以下模式。有一个带有按钮的父窗体和一个用于创建子窗体的抽象基类。多个子窗体,如ChildForm1
,ChildForm2
将从ParentForm
中产生,如按按钮等事件。这是我目前正在做的事情的简单表示。
public partial class ParentForm : Form
{
public ParentForm()
{
InitializeComponent();
}
private void Button1_OnClick(object sender, EventArgs e)
{
new ChildForm1(this).Show();
}
// Some other methods
}
public abstract partial class BaseChildForm : Form
{
protected readonly Form _parent;
public BaseChildForm(Form parent)
{
_parent = parent;
InitializeComponent();
}
private void ThisForm_OnAppear(object sender, EventArgs e)
{
// Do some changes in the parent form through _parent field
}
// Some other methods as well
}
public partial class ChildForm1 : BaseChildForm
{
public ChildForm1(Form parent) : base(parent){}
// Overridden abstract methods and other methods
// Do some tampering with the parent form
}
public partial class ChildForm2 : BaseChildForm
{
public ChildForm2(Form parent) : base(parent){}
// Overridden abstract methods and other methods
// Do some tampering with the parent form
}
在这段代码中,我实际上希望在子窗体中执行某些操作时访问和控制ParentForm
的行为和其他属性。但是正如您所看到的,ParentForm
的公共成员完全暴露给子窗体。此外,当多个ChildForm
示例在给定时间操作ParentForm
时,它可能是一个问题并导致意外结果。
到目前为止,这个模式对我来说是“gets things done”。但我想知道是否有其他更好的方法来达到我的要求?
1条答案
按热度按时间xkftehaa1#
我不认为将
ParentForm
暴露给子窗体是一个好的做法。您可以为常见的ParentForm
操作/属性提取接口,在ParentForm
中实现它们,并将接口示例注入到子窗体,如下所示: