我在一个项目/命名空间中有两个表单需要相互通信.表单A创建表单B的实例; 并且表单B需要访问表单A中的值(看起来很简单).
我在VB中从头开始构建表单时创建了这种类型的功能.这次我正在处理一个预先存在的项目,我无法获得表单B来访问表单A的值.是什么导致了这个问题,我该如何解决?
谢谢您的帮助!
我在表单A中创建了一个getter函数:
public string getID()
{
return txtID.Text;
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试在表单B中访问此方法:
string strID = getID();
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:"当前上下文中不存在名称'getID'"
此外,我尝试以这种方式访问该功能(但它不起作用):
A.getID();
Run Code Online (Sandbox Code Playgroud)
你已经声明了一个实例方法(而不是出于某种原因的属性,而忽略了.NET命名约定,但是嘿......).
这意味着您需要在表单的实例上调用它.所以作为一个简单的例子:
FormA a = new FormA();
// Use a for a while, whatever
String id = a.getID();
Run Code Online (Sandbox Code Playgroud)
现在,因为它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();
}
}
Run Code Online (Sandbox Code Playgroud)
尽管如此,将表格结合起来通常并不是一个好主意.是否FormB真的需要以后获得的价值?也许FormA只能将ID传递给构造函数FormB而不是?