添加TableLayoutPanel后直接在UserControl中寻址控件

时间:2013-03-21 18:28:07

标签: winforms user-controls tablelayoutpanel

我最近在WinForms项目中重构了用户控件的代码,并将其从带有文本框,组合和按钮的用户控件更改为现在包含TableLayoutPanel的用户控件。以更好的顺序保存所有控件。

我的问题是,在许多地方,代码直接通过Controls字典寻址嵌套在用户控件中的控件 - 例如:MyUserControl.Controls["NameOfTextBox"].Visible = false;

现在,在我嵌套TableLayoutPanel中的文本框和按钮之后,我再也不能进行这样的寻址了,现在我应该写MyUserControl.Controls[0].Controls["NameOfTextBox"].Visible = false;,否则我会得到一个异常。

我的问题是我是否应该在解决用户控件内容的每个地方更改我的所有代码,或者你能为我提供一些解决方法来实现用户控件本身,所以当我尝试直接解决控件时,它会将它转发到TableLayoutPanel的内容。

任何想法?

1 个答案:

答案 0 :(得分:0)

  

我的问题是,在许多地方,代码直接嵌套在用户控件中的控件......

这可能是核心问题。尝试为您创建属性UserControl:

public bool NameBoxVisible {
  get { return NameOfTextBox.Visible; }
  set { NameOfTextBox.Visible = value; }
}

然后,您可以直接在UserControl中引用控件,但可以将控件的使用者分开关注。