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属性的类型仅为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
的引用注入到表单中。