0

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

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

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

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

有任何想法吗?

4

1 回答 1

0

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

这大概是核心问题。尝试为您的 UserControl 创建属性:

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

然后,您可以直接在 UserControl 中引用控件,但为控件的使用者提供关注点分离。

于 2013-03-21T19:30:13.957 回答