c# - Winforms 中的所有者表单

标签 c# .net winforms

假设您有 2 种形式:FormA 和 FormB..

在 FormA 中我有一些属性。 FormA 创建 FormB 并设置所有者属性。例如:

public FormA() 
{
    FormB = new FormB(){Owner = this};
}

现在,在 FormB 中,如果我想访问我在 FormA 上声明的属性。 为什么我在写作时看不到它们:

Owner. // here I need to see FormA properties...

为什么它不能像这样工作?

最佳答案

因为继承和多态你看不到。

在 .NET 中,Forms 继承自一个名为 Form 的基类。你的 FormA 是从 Form 派生的类,FormB 也是。

现在,Form 引用了 Owner 表单,

public Form Owner { get; }

您为其分配了一个 FormA。没问题!派生类可以被视为它们的基类。但是,如果您访问它,您会得到一个表单,因此您需要做的是新表单转换回您实际提供的表单:

FormA form = (FormB)Owner;

这几乎和做的一样:

FormA form = Owner as FormB;

但是有一些注意事项。 as 运算符是一个“安全转换”,如果对象不是提供的类型,它会返回空值。

我建议您仅使用我们提供的代码,并在有时间时学习继承和多态性。它们是了解正在发生的事情的关键。

如果我可以做一些 self 推销,我 wrote a piece关于为什么您通常会及时避免使用 as ,您可能会发现它很有趣。

关于c# - Winforms 中的所有者表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15420939/

相关文章:

c# - PictureBox PaintEvent 与其他方法

c# - System.InvalidOperationException : 'Unable to resolve service for type ' Microsoft. Extensions.Logging.ILogger`1

winforms - 如何将表单置于桌面顶部?

c# - 有限检查C#中的CheckBox

c# - RibbonSplitButton 命令执行两次

c# - TPL 和内存管理

c# - 在 LinqPAD 中将字典列表可视化为数据网格?

c# - 从 xml 中提取节点数据

.net - 为什么我们有两个 JWT token 类 JwtSecurityTokenHandler 和 JsonWebTokenHandler?

c# - 将标签文本的一部分设置为粗体