用户控件在 Visual Studio 设计器中显示属性,但属性没有改变

9

今天,我决定在使用Visual Studio 2012时使用C#创建一个自定义的TextButton控件。 我非常喜欢我设计的样式,尽管它可能很简单。 然而,当我决定将我的完成组件移动到使用Visual Studio Designer的表单中时,遇到了一个问题。 尽管Text属性出现在属性列表中,但该属性实际上并没有在MainWindow.Designer.cs文件中更改。 下面是定义属性的代码:

[Category("Appearance")]
[Description("The text displayed by the control.")] 
[Browsable(true), EditorBrowsable(EditorBrowsableState.Always)]
public override string Text
{
    get
    {
        return Button.Text;
    } 
    set
    {
        Button.Text = value;
    }
}

这是我的MainWindow.Designer.cs文件在InitializeComponent方法中创建的代码:

this.Open = new UI.Controls.TextButton();
this.Open.Location = new System.Drawing.Point(9, 3);
this.Open.Name = "Open";
this.Open.Size = new System.Drawing.Size(112, 28);
this.Open.TabIndex = 4;
this.Open.Click += new System.EventHandler(this.OpenButton_Click);

这是一个用户控件还是自定义控件,简而言之,您是否继承自按钮。 - Mark Hall
这是一个UserControl,其中包含一个System.Windows.Forms.Button停靠在中间,以占据控件的整个视图。 - Noah Crowley
1个回答

7
问题的一部分在于您覆盖了 UserControlText 属性。如果您将属性命名为除 Text 之外的其他名称,例如 myText,它就会起作用。为了解决使用 Text 导致的问题,请尝试向您的属性添加 DesignerSerializationVisibility 属性,这应该可以解决问题。
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]

设计师仍未将覆盖属性添加到MyControl.Designer.cs文件中。我使用属性窗口更改值,设计师显示它,但在重建或关闭/打开[设计]后,它就消失了。 - Pedro77
看起来你需要添加base.Text = value;。现在它可以工作了。来源:https://dev59.com/NFnUa4cB1Zd3GeqPedu7 - Pedro77

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接