2011-04-18 37 views
0

我正在使用Windows应用程序窗体。我有一个CustomControl(说MasterControl)上,我把一个分裂面板,现在我的MasterControl被分成三个部分说:C#:如何从另一个自定义控件访问自定义控件的公共成员

  • Pannel1
  • Pannel2
  • Pannel3

现在我发展三个自定义控件,并在每个pannels中放置一个例如

  • Pannel1有CustomControl1
  • Pannel2有CustomControl2
  • Pannel3有CustomControl3

现在某处CustomControl3我需要访问公共成员CustomControl1的。为此,我写了以下代码:

((MasterControl)this.Parent)._oCustomControl1.PublicMember = this.PublicMember; 

上面的代码在我的情况下不起作用。当这行代码在调试模式下执行时,会出现一个消息框,并指出“没有可用于当前位置的代码”

+0

看起来你正在运行一个过时的项目。 – 2011-04-18 11:58:08

回答

0

我自己找到了答案。我在这里定位,因为它可能会帮助其他人。 确切的代码是:

((MasterControl)this.Parent.Parent.Parent)._oCustomControl1.PublicMember = this.PublicMember; 

基本上我coustomcontrol3在于一个分割容器面板的内部,因此,当我写道: this.Parent然后它指向其所驻留面板中,如果我写 this.Parent.Parent然后它指向在spliter容器,其面板上方存在,如果我写 ​​然后将其指向控制在这个分裂容器驻留

我从“法齐ZAKER”答案的想法,所以拜他为他的贡献

2

如果您的主控制器中有一个拆分面板,则应该使用两个级别找到你的主控:

((MasterControl)this.Parent.Parent)._oCustomControl1.PublicMember = this.PublicMember; 
3

这是一个非常糟糕设计为您的控件取决于如何被排列在父容器上。

例如在第三个控件中,通过从父项访问它来查询第一个控件的属性,然后通过名称控制它。

如果可以编译的话,你的代码会很容易中断 - 我认为你遇到的问题是编译顺序:为了编译你的父窗体,它需要有子用户控件完了。另一方面,您创建的用户控件需要完成表单。

从这些控件的容器中设置你想要的任何行为将会好得多 - 例如,通过对控件的事件作出反应,并在适当的其他控件上设置适当的东西(还有其他方法当然 - 关键在于信息的方向和流向 - 谁在设置和使用什么)。

+0

我完全同意你的看法,但是它的旧代码和我只做了一些升级。 – Jame 2011-04-19 04:59:29

相关问题