ParentForm class usage

本文关键字:usage class ParentForm | 更新日期: 2023-09-27 18:20:55

我只是想知道为什么不能使用Forms.ParentForm类从子窗体为ParentForm成员赋值。类似:

ParentForm.database.Remove(this.userAuth.Key);
ParentForm.database.Add(this.userAuth.Key, newValue);

感谢您的推荐!

ParentForm class usage

ParentForm属性的类型仅为Form。。。如果不先将特定的父窗体强制转换为该类型,则无法访问该父窗体中的任何内容。

假设database是可访问的,并且您的父窗体名为"YourParentForm":

((YourParentForm)ParentForm).database.Remove(this.userAuth.Key);

或者,在实例化子窗体时,可以考虑将数据库的实例传递给子窗体,例如通过构造函数。

private SomeDatabaseType database;
public YourChildForm(SomeDatabaseType database)
{
    this.database = database;
}

ParentForm返回一个Form对象,该对象没有"数据库"属性。只需将返回值投射到您的特定类型

MyFormType parent = (MyFormType)ParentForm;
parent.database.Remove(this.userAuth.Key);
parent.database.Add(this.userAuth.Key, newValue);

您可以像这样使用Forms.ParentForm,只要您(1)使database为内部(如果表单在同一项目中)或public,并(2)将ParentForm强制转换为其真实类型即可。

不过你不应该这么做。如果你这样做的话,你会把表单紧紧地耦合到一个特定的父表单上。这会使编写测试变得更加困难,如果你需要表单属于另一个父表单(例如,在其他地方重复使用它),以后也会使更改代码变得更加困难。更好的方法是通过其构造函数将对database的引用注入到表单中。