Как получить доступ к свойствам usercontrol в C # - PullRequest
20 голосов
/ 04 января 2009

Я создал пользовательский контроль C # с одним текстовым полем и одним richtextbox.

Как получить доступ к свойствам richtextbox из-за пределов контроля пользователя.

Например ... если я положу это в форму, как я могу использовать свойство Text для richtextbox ???

спасибо

Ответы [ 5 ]

32 голосов
/ 04 января 2009

Самый простой способ - указать нужные свойства как свойства вашего пользовательского элемента управления, например:

class MyUserControl
{
  // expose the Text of the richtext control (read-only)
  public string TextOfRichTextBox
  {
    get { return richTextBox.Text; }
  }
  // expose the Checked Property of a checkbox (read/write)
  public bool CheckBoxProperty
  {
    get { return checkBox.Checked; }
    set { checkBox.Checked = value; }
  }


  //...
}

Таким образом, вы можете контролировать, какие свойства вы хотите предоставить и должны ли они быть доступны для чтения / записи или только для чтения. (конечно, вы должны использовать более подходящие имена для свойств, в зависимости от их значения).

Еще одним преимуществом этого подхода является то, что он скрывает внутреннюю реализацию вашего пользовательского контроля. Если вы когда-нибудь захотите обменять свой элемент управления richtext с другим, вы не нарушите вызывающих / пользователей вашего элемента управления.

3 голосов
/ 04 января 2009

Добавьте свойство в usercontrol, как это

public string TextBoxText
{
    get
    {
        return textBox1.Text;
    }
    set
    {
        textBox1.Text = value;
    }
}
3 голосов
/ 04 января 2009

Измените модификатор доступа («Модификаторы») RichTextBox в сетке свойств на Public.

2 голосов
/ 17 июня 2010

У меня недавно были некоторые проблемы, связанные с пользовательским классом:

Пользовательский элемент управления имел открытое свойство, которое имело пользовательский тип класса. Конструктор по умолчанию пытается присвоить ему какое-то значение, поэтому в коде конструктора автоматически добавлялась строка userControlThing.CustomClassProperty = null.

Цель состояла в том, чтобы обеспечить пользовательский элемент управления пользовательским классом в любой момент при запуске программы (для изменения значений, видимых пользователю). Поскольку часть set {} не проверяла нулевые значения, возникали различные ошибки.

Решением было изменить свойство на частное и использовать два открытых метода для установки и получения значения. Дизайнер попытается автоматически назначить свойства, но оставляет методы в покое.

0 голосов
/ 04 января 2009

Вам необходимо сделать открытое свойство для richtextbox или предоставить другое свойство, которое выполняет задание текста richtextbox, например:

private RichTextBox rtb;

public string RichTextBoxText
{
    get
    {
        return rtb.Text;
    }
    set
    {
        rtb.Text = value;
    }
}
...