-2

我在一个项目/命名空间中有两种需要相互通信的表单。表单 A 创建表单 B 的实例;并且表单 B 需要访问表单 A 中的值(看起来很简单)。

在 VB 中从头开始构建表单时,我已经创建了这种类型的功能。这次我正在处理一个预先存在的项目,我无法让表单 B 访问表单 A 的值。是什么导致了这个问题,我该如何解决?

谢谢您的帮助!

我在表格 A 中创建了一个 getter 函数:

public string getID()
        {
            return txtID.Text;
        }

然后我尝试在表单 B 中访问此方法:

string strID = getID();

我得到的错误是:“当前上下文中不存在名称'getID'”

另外,我尝试以这种方式访问​​该函数(但它不起作用):

A.getID();
4

1 回答 1

5

您已经声明了一个实例方法(而不是出于某种原因的属性,并且忽略了 .NET 命名约定,但是嘿......)。

这意味着您需要在表单的实例上调用它。举个简单的例子:

FormA a = new FormA();
// Use a for a while, whatever
String id = a.getID();

现在因为它FormA创建了FormB自己,它可能只需要将自己的引用传递给FormB,使用this

FormB formB = new FormB(this);

...

class FormB
{
    private FormA parent;

    internal FormB(FormA parent)
    {
        this.parent = parent;
    }

    public void SomeOtherMethod()
    {
        // Or parent.Id as it would normally be, as a property...
        string id = parent.getID(); 
    }
}

不过,像这样紧密地耦合表单通常不是一个好主意。FormB以后真的需要获取价值吗?也许FormA可以只将 ID 传递给构造函数FormB

于 2013-06-14T23:38:17.720 回答