0

最近、WinFormsプロジェクトのユーザーコントロールのコードをリファクタリングし、テキストボックス、コンボ、ボタンが配置されたばかりのユーザーコントロールから、すべてを保持するTableLayoutPanelを含むユーザーコントロールに変更しました。より良い順序で制御します。

私の問題は、多くの場所で、コードがコントロールディクショナリを介してユーザーコントロールにネストされたコントロールを直接アドレス指定することです。たとえば、次のようになります。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 に答える