【问题标题】:Extend a System.Windows.Forms.Button and change default Text in c#扩展 System.Windows.Forms.Button 并在 c# 中更改默认文本
【发布时间】:2012-03-29 12:34:31
【问题描述】:

我通过扩展 System.Windows.Forms.Button 类创建了一个自定义控件按钮。

我已经在新类的构造函数中设置了默认的 .Text .Width 和 .Height 。

当我将此控件放到窗体上时,IDE 足够聪明,可以注意构造函数中指定的宽度和高度,并将这些属性分配给正在创建的新按钮,但它会忽略 Text 属性,并分配.Text 为“ucButtonConsumables1”的按钮

有没有办法将 .Text 设置为我选择的默认值?

public partial class ucButtonConsumables : System.Windows.Forms.Button {
    public ucButtonConsumables() {

        this.Text = "Consumables";                   
        this.Width = 184;
        this.Height = 23;

        this.Click += new EventHandler(ucButtonConsumables_Click);

    }

    void ucButtonConsumables_Click(object sender, EventArgs e) {

        MessageBox.Show("Button Clicked")

    }

}

【问题讨论】:

  • 您是否运行程序并检查文本是否是您的意思?我觉得你在设计器中检查这个,你不应该运行它
  • 您正试图与定制设计师争夺一个按钮。赢得这场战斗并不容易,您正在尝试做一些非常不寻常的事情。为 每个 按钮赋予相同的文本毫无意义。
  • 是的——我肯定是在和设计师战斗。设计者为控件分配了一个名称,并希望将 .Text 属性分配为相同。

标签: c# button text controls default


【解决方案1】:

从设计器序列化中隐藏 Text 属性:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public override string Text
{
    get { return base.Text; }
    set { base.Text = value; }
}

或者使用默认值创建设计器:

public class ConsumablesButtonDesigner : System.Windows.Forms.Design.ControlDesigner
{
    public override void OnSetComponentDefaults()
    {
        base.OnSetComponentDefaults();
        Control.Text = "Consumables";
    }
}

并将该设计器提供给您的按钮:

[Designer(typeof(ConsumablesButtonDesigner))]
public class ucButtonConsumables : Button
{
   //...
}

【讨论】:

  • 第一个选项需要编译以刷新按钮的默认文本。
  • 上面的第二种方法效果很好。第一种方法包括干净重建等对我不起作用,但可能会持续存在。
  • @timothy 第一种工作方法,您需要编译项目。编译后,默认设计器文本将替换为您的
【解决方案2】:

您必须覆盖派生类中的 Text 属性才能更改。

public override string Text { get; set; }

【讨论】:

  • 仅覆盖该属性时,不会设置该值。加载控件时,Text 属性将被重置。
【解决方案3】:

是的,在构造函数中是不可能的。如果您确定该值不会再次更改,请以这种方式进行。覆盖 Text 属性并返回常量。

    public override string Text
    {
        get
        {
            return "Consumables";
        }
        set
        {
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    相关资源
    最近更新 更多