Пользовательский контроль - Пользовательские свойства - PullRequest
68 голосов
/ 17 января 2010

Я разработал пользовательский элемент управления в Visual Studio (WinForms C #) и у меня есть вопрос.

Мне нужно, чтобы пользователь моего пользовательского элемента управления мог изменять определенные строковые значения, и я бы хотел, чтобы они могли добавить пользовательский элемент управления в свою форму и щелкнуть по нему, чтобы открыть панель свойств, где пользовательский элемент управления пользователя настраивается. свойства будут отображены.

Как я могу иметь свои собственные пользовательские свойства для своего пользовательского элемента управления? Например:

Мой пользовательский элемент управления содержит TextBox, и я хотел бы, чтобы пользователь мог изменять значение этого TextBox через свойство с именем «Text» или «Value» в свойствах во время разработки.

Ответы [ 3 ]

100 голосов
/ 17 января 2010

Вы делаете это через атрибуты свойств, например:

[Description("Test text displayed in the textbox"),Category("Data")] 
public string Text {
  get { return myInnerTextBox.Text; }
  set { myInnerTextBox.Text = value; }
}

Категория - это заголовок, под которым свойство будет отображаться в окне свойств Visual Studio. Вот более полный справочник MSDN , включая список категорий.

41 голосов
/ 17 января 2010

Это очень просто, просто добавьте свойство:

public string Value {
  get { return textBox1.Text; }
  set { textBox1.Text = value; }
}

Использование свойства Text немного сложнее, класс UserControl намеренно скрывает его. Вам нужно переопределить атрибуты, чтобы вернуть его в рабочее состояние:

[Browsable(true), EditorBrowsable(EditorBrowsableState.Always), Bindable(true)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public override string Text {
  get { return textBox1.Text; }
  set { textBox1.Text = value; }
}
6 голосов
/ 17 января 2010

Просто добавьте открытые свойства в пользовательский элемент управления.

Вы можете добавить атрибуты [Category("MyCategory")] и [Description("A property that controls the wossname")], чтобы сделать его лучше, но если это свойство public , оно должно отображаться на панели свойств.

...