如何公开UserControl的Text属性?

Ian*_*oyd 7 c# user-controls winforms

可能重复:
C#中UserControl中的Text属性

如何Text将a属性标记UserControl为可浏览?


.NET UserControl类有一个Text属性.

不幸的是Text,a 的属性UserControl是不可浏览的:

//
//
// Returns:
//     The text associated with this control.
[Bindable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public override string Text { get; set; }
Run Code Online (Sandbox Code Playgroud)

在我的UserControl揭露Text属性(即使其" 可浏览 ")在属性窗口.我试着盲目宣布它可浏览:

[Browsable(true)]
public override string Text { get; set; }
Run Code Online (Sandbox Code Playgroud)

现在它出现在属性窗口中,除了它现在什么都不做.

我试图盲目地调用base.Text以恢复功能:

[Browsable(true)]
public override string Text { get {return base.Text;} set { base.Text = value; this.Invalidate(); } }
Run Code Online (Sandbox Code Playgroud)

现在属性在设计时运行,但属性值不会持久保存到Form.Designer.cs它的InitalizeComponent代码中.

暴露属性的正确方法是什么UserControl Text,以便:

  • 在属性窗口中可浏览
  • 是功能性的
  • 在表单设计器中持久存在

并作为奖励:

  • 知道什么时候改变

SLa*_*aks 11

你走在正确的轨道上; 加上[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]

要找出它发生变化的时间,请覆盖OnTextChanged:

protected override void OnTextChanged (EventArgs eventArgs)
{
    System.Diagnostics.Trace.WriteLine("OnTextChanged(): eventArgs: " + eventArgs);  
    base.OnTextChanged(eventArgs);
}
Run Code Online (Sandbox Code Playgroud)