0

次のコードがあります。AutoEllipsisImageImageAlignImageIndexImageKeyImageListおよびTabIndexプロパティを非表示にするにはどうすればよいですか?

また、デフォルトのサイズを 50x50px に設定するにはどうすればよいですか?

public class GradientBox : Label
{
    [DefaultValue(false), Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public override bool AutoSize { get; set; }

    [DefaultValue(false), Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public override string Text { get; set; }

    [DefaultValue(false), Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public override ContentAlignment TextAlign { get; set; }

    // NullRef Exception if use { get; set; }
    [DefaultValue(false), Browsable(false), EditorBrowsable(EditorBrowsableState.Never), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public override Font Font
    {
        get { return base.Font; }
        set { base.Font = value; }
    }

    public override BorderStyle BorderStyle
    {
        get { return BorderStyle.FixedSingle; }
        set { base.BorderStyle = value; }
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        e.Graphics.FillRectangle(new LinearGradientBrush(new Point(0, 0), new Point(0, this.Height), this.ForeColor, this.BackColor), ClientRectangle);
    }
}
4

1 に答える 1

3

何かから継承する場合、新しいクラスは、それが基本型であるかのように動作できる必要があります (ポリモーフィズムの 1 つの側面)。つまり、ベースよりも少ない機能を提供することはできません。したがって、これらのプロパティを削除する方法はありませんLabel

代わりに考慮したいのは「構成」です。

public class GradientBox : Control
{
    private Label myLabel;
    public GradientBox()
    {
        myLabel = new Label;
        // Set your default values
    }


    public Font Font
    {
        get { return myLabel.Font; }
        set { myLabel.Font = value; }
    }
    // repeat to expose just the properties you want.
 }
于 2013-01-29T16:20:15.827 に答える