【问题标题】:Text property in a UserControl in C#C# 中 UserControl 中的文本属性
【发布时间】:2010-05-21 10:55:51
【问题描述】:

我有一个带有内部文本框的控件。我想在 UserControl 的 Text 属性和 TextBox 的 Text 属性之间建立直接关系。我意识到的第一件事是文本没有显示在用户控件的属性中。然后我添加了 Browsable(true) 属性。

[Browsable(true)]
public override string Text
{
    get
    {
        return m_textBox.Text;
    }

    set
    {
        m_textBox.Text = value;
    }
}

现在,文本将显示一段时间,然后被删除。这是因为信息不会自动写入xxxx.Designer.cs 文件中。如何改变这种行为?

【问题讨论】:

    标签: c# winforms user-controls


    【解决方案1】:

    你需要更多属性:

    [EditorBrowsable(EditorBrowsableState.Always)]
    [Browsable(true)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
    [Bindable(true)]
    public override string Text { get; set; }
    

    【讨论】:

    • 不要忘记在添加属性后重建以使更改出现在设计器中。
    【解决方案2】:

    Reflector 是 .NET 开发人员的重要工具。当您使用它来查看 UserControl.Text 属性时,您需要做什么就很明显了:

    [Bindable(false), EditorBrowsable(EditorBrowsableState.Never), Browsable(false),
     DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public override string Text
    {
        get
        {
            return base.Text;
        }
        set
        {
            base.Text = value;
        }
    }
    

    Ho 向您展示了取消这些属性所需的操作,可惜他没有向您展示他是如何发现的。 Reflector is 是免费的,从 redgate.com 下载或在此处查看替代方案:Something Better than .NET Reflector?

    【讨论】:

    • 汉斯,建议 +1。但是我必须接受何的回答,因为它也是正确的,而且写得更早。谢谢!
    【解决方案3】:

    对于InitializeComponent() 中的序列化,您只需要DesignerSerializationVisibilityAttribute

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
    

    【讨论】:

      猜你喜欢
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      • 2014-04-04
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 2011-11-03
      • 2012-06-25
      相关资源
      最近更新 更多