c#:如何从另一个自定义控件访问自定义控件的公共成员
本文关键字:自定义控件 访问 成员 另一个 | 更新日期: 2023-09-27 17:50:22
我正在做windows申请表格。我有一个自定义控件(比如MasterControl),我在上面放了一个分割面板,现在我的MasterControl被分割成三个部分,输入:
- Pannel1
- Pannel2
- Pannel3
现在我开发了三个自定义控件,并在每个面板中放置一个,例如
- Pannel1 have CustomControl1
- Pannel2有CustomControl2
- Pannel3 have CustomControl3
现在在CustomControl3的某个地方,我需要访问CustomControl1的公共成员。为此我编写了以下代码:
((MasterControl)this.Parent)._oCustomControl1.PublicMember = this.PublicMember;
上面的代码在我的情况下不起作用。当这行代码在调试模式下执行时,会出现一个消息框,指出"当前位置没有可用的代码"
这是一个真的很糟糕的设计,你的控件取决于如何安排在父容器上。
。在第三个控件中,您通过从父控件访问第一个控件来查询它的属性,然后通过名称查询它的子控件。
你的代码会很容易打破,如果它可以编译在所有-我认为你的问题是编译的顺序:为了你的父表单被编译,它需要有子用户控件完成。另一方面,您创建的用户控件需要有完整的表单。
最好从这些控件的容器中设置任何行为-例如,通过对控件中的事件作出反应,并在适当的其他控件上设置适当的东西(当然也有其他方法-关键是方向和信息流-谁在设置和使用什么)。
如果你的主控件中有一个拆分面板,你应该向上走两层来找到你的主控件:
((MasterControl)this.Parent.Parent)._oCustomControl1.PublicMember = this.PublicMember;
我自己找到了答案。我在这里假设,因为它可能会帮助别人。确切的代码是:
((MasterControl)this.Parent.Parent.Parent)._oCustomControl1.PublicMember = this.PublicMember;
基本上我的customcontrol3位于一个分裂的容器面板,所以当我写:this.Parent
然后它指向它所在的面板,如果我写this.Parent.Parent
然后它指向上面面板驻留的拆分器容器,如果我写this.Parent.Parent.Parent
然后它指向这个分割容器所在的控件
我从"Farzin Zaker"的回答中得到了这个想法,所以感谢他的贡献