【问题标题】:2 Projects, 1 Solution. Project A calls forms from project B and vice versa. C# VS20102 个项目,1 个解决方案。项目 A 从项目 B 调用表单,反之亦然。 C# VS2010
【发布时间】:2017-07-18 18:59:09
【问题描述】:

我有一个项目 A,它从项目 B 调用一个表单。项目 A 中的表单被禁用,项目 B 表单打开。关闭时,我需要项目 B 来重新启用项目 A 表单,但它不允许我因为循环引用而无法引用它。如何从项目 A 中引用项目 B 中的内容?

【问题讨论】:

  • 你为什么不考虑一个项目 C,你同时参考项目 A 和 B?
  • 这些表单相互依赖的事实应该告诉您它们属于同一个项目。
  • @ManojKumarRai 我可以这样做,但我想要一个更优雅的解决方案。

标签: c# winforms visual-studio-2010


【解决方案1】:

听起来项目 B 不需要引用回项目 A。有多种方法可以实现这一点:

a.) 项目 A 的表单通过调用 ShowDialog() 而不是 Show() 来打开项目 B 表单。这会自动禁用 A 的表单,直到 B 关闭。

b.) 项目 A 的表单手动禁用自身并开始监听项目 B 表单上的 FormClosed 事件。当事件触发时,项目 A 的表单再次启用。

c.) 在特殊情况下,有时您需要 A 的表单来禁用和显示 B 的表单,有时您需要 B 的表单来禁用和显示 A 的表单,您可以通过让项目 A 创建两个表单并传递一个来实现作为对他人的参考。将构造函数添加到以另一种形式作为引用的形式:

private Form _formA;

public FormB(Form formA) {
    InitializeComponent();

    _formA = formA;
}

private void buttonFormA_Click(object sender, EventArgs e) {
    _formA.ShowDialog();
}

【讨论】:

  • 我最终为这两个大项目创建了几个命名空间,但如果我坚持使用这两个项目的解决方案,您的建议就可以解决问题。
猜你喜欢
  • 2011-12-01
  • 1970-01-01
  • 2012-01-24
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
相关资源
最近更新 更多