Как запретить пользователю UserControl видеть дочерние элементы управления? - PullRequest
2 голосов
/ 04 апреля 2011

если в C # вы создаете Windows UserControl, «дочерние» элементы управления этого UserControl предоставляются через коллекцию «Controls».То есть потребитель вашего пользовательского элемента управления может обратиться к коллекции элементов управления и получить доступ к внутренним элементам управления.

Существует ли способ разделить такую ​​конструкцию так, чтобы потребитель не мог получить доступ к чему-либо, что не былоявно предоставлен разработчиком UserControl?

Пример: у меня есть пользовательский элемент управления, который внутри имеет два элемента управления TextBox.Потребитель моего UserControl может написать следующее:

MyControl1.Controls[0].Enabled = false;

Есть ли способ (например), чтобы свойство «Controls» возвращало пустую коллекцию, чтобы потребитель не мог возиться с внутренней работойпользовательский элемент управления?

Казалось бы, разумно, что UserControl должен предоставлять практически все свойства, которые будет предоставлять «элемент управления», но не коллекции, которые предоставляют доступ к его внутренней работе.

Спасибо, Росс

1 Ответ

0 голосов
/ 07 июня 2011

Не знаю, будет ли это работать во всех случаях, но, похоже, в очень простом тесте.

public partial class UserControl1 : UserControl
{
  private ControlCollection _controls;

  public UserControl1()
  {
     InitializeComponent();

     _controls = new ControlCollection(this);
  }

  new public ControlCollection Controls
  {
     get
     {
        return (_controls != null ? _controls : base.Controls);
     }
  }
}

Конечно, потребуется осторожность, если пользовательский элемент управления захочет получить доступ к своей собственной коллекции "Controls" (и должен будет использовать base.Controls) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...