我在一个项目/命名空间中有两个表单需要相互通信。表单A创建表单B的实例;并且表单B需要访问表单A中的值(看起来很简单)。
我在VB中从头开始构建表单时创建了这种类型的功能。这次我正在处理一个预先存在的项目,我无法获得表单B来访问表单A的值。是什么导致了这个问题,我该如何解决?
感谢您的帮助!
我用A:
形式创建了一个getter函数public string getID()
{
return txtID.Text;
}
然后我尝试在表单B中访问此方法:
string strID = getID();
我得到的错误是:“当前上下文中不存在名称'getID'”
此外,我尝试以这种方式访问该功能(但它不起作用):
A.getID();
答案 0 :(得分: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
的构造函数而不是?