【问题标题】:Reference to parent form from Class Library从类库中引用父窗体
【发布时间】:2013-03-26 12:28:51
【问题描述】:

我一直在尝试将我所有的类编译成一个类库,这是一个非常好的特性。我的目标是在其中包含不包含特定应用程序代码的所有代码。当我尝试添加一个引用父表单的类时,我遇到了问题,因为类库中没有父表单。如何创建对在应用程序中创建父类之前未知的表单的引用?

public class Form1 : Form
{

private Child child;

public Form1()
{
    child = new Child(this);
}


}


public class Child
{


    private Form1 parent;
    public Child(Form1 parent)
    {
        this.parent = parent;
    }


}

此代码在标准应用程序中工作,但是当我将 Child 类添加到类库时,“Form1”文本将无法编译,因为 Form1 不包含在类库中。有没有办法解决?感谢您的帮助。

【问题讨论】:

  • 如果 Child 被放置在一个库中,那么它不应该对 Form1 有任何依赖
  • 正如我对另一个答案的评论。然后在孩子中制作一个事件并从父母那里订阅它而不是从孩子那里调用父母的方法是最佳做法吗?谢谢。
  • 使用事件打破对视图的依赖。如果这会导致困难,请使用接口。

标签: c# forms reference class-library


【解决方案1】:

既然Form1派生自Form,为什么不把Form作为Child的构造函数的参数呢?

public class Child
{
    private Form parent;
    public Child(Form parent)
    {
        this.parent = parent;
    }
}

这至少会打破你的类库对你的应用程序的依赖,但它仍然需要 Form 对 WinForms 的依赖。这取决于您打算在代码中使用 parent 做什么,但这是否足够。

【讨论】:

  • 我试过这个并意识到它不起作用,因为我的子表单正在调用父表单上的函数。我是自学的,但由于依赖问题,我开始认为这是不好的做法。正确和更好的方法是在子表单上创建一个事件并在父表单上订阅它。那么当事件被触发时,它会在父窗体上调用该函数吗?谢谢。
  • 是的,事件肯定是一个更好的解决方案。
猜你喜欢
  • 2013-07-23
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多