【问题标题】:How to pass data from a visible form to another visible form?如何将数据从可见表单传递到另一个可见表单?
【发布时间】:2012-02-16 11:38:49
【问题描述】:

我有两种形式,即:FormA 和 FormB。

假设 FormA 当前可见,我需要将数据传递给 FormB。

我可以通过使用构造函数轻松做到这一点,

 FormB PassToThisForm = new FormB(int Data);
 PassToThisForm.ShowDialog();

现在,我的问题是如何在 FormA 当前可见的情况下从 FormB 获取一些数据?

我不能这样做:

  FormA main = new FormA();

因为它会创建一个新的 FormA 实例...有什么想法吗?

提前致谢^_^

【问题讨论】:

  • 您是否希望在关闭时将FormB 返回 数据以形成 A(这样 Mitch 的建议将是有效的)或者您是否需要表格来交换信息而两者都活跃?
  • 我目前正在阅读 Mitch 的答案。如果遇到问题,我会发表我的评论。谢谢 mitch
  • @@John Mark Flores:如果我的链接答案对您有所帮助,请考虑投票。
  • 我试过了,但它需要 15 声望..

标签: c#


【解决方案1】:

您可以使用 FormB 的构造函数传递对 FormA 的引用。

你的 FormB 类可能看起来像这样:

partial class FormB
{

     private FormA reftoA; 

     public FormB(FormA formref, int Data)
     {
          reftoA= formref;
     }

     private void SomeMethodToChangeSomethinginFormA()
     {
              reftoA.SomeProp= 4;
     }
}

【讨论】:

    【解决方案2】:

    我以前做过这件事,例如FormB 实现一个接口,该接口包含来自 FormA 的值的属性。在 FormA 的构造函数中,我为该接口声明了一个参数。然后我在依赖注入容器中声明 FormB 是传递给该接口的 FormA 的实现。

    public interface ISomeInterface
    {
        int SomeProperty { set; }
    }
    
    public class FormB : Form, ISomeInterface
    {
        int SomeProperty { set; private get; }
    
        // rest of FormB code
    }
    
    public class FormA
    {
        private readonly ISomeInterface someInterface;
        FormA(ISomeInterface someInterface)
        {
            if (someInterface == null) throw new ArgumentNullException();
            this.someInterface = someInterface;
        }
    
        // then in FormA you can refer to someInterface.SomeProperty
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2014-04-18
      • 1970-01-01
      相关资源
      最近更新 更多