Пользовательская кнопка управления переопределением - PullRequest
3 голосов
/ 25 апреля 2010

Я пытаюсь создать пользовательскую командную кнопку, которая по умолчанию использует ширину и высоту для определенных настроек. У меня есть следующий код:

public partial class myCommandButton : Button
{
    public magCommandButton()
    {
        InitializeComponent();

    }

    [DefaultValue(840)]
    public override int Width
    {
        get 
        {
            return base.Width;
        }
        set
        {
            base.Width = value;
        }
    }

    [DefaultValue(340)]
    public override int Height
    {
        get
        {
            return base.Height;
        }
        set
        {
            base.Height = value;
        }
    }

    protected override void OnPaint(PaintEventArgs pe)
    {
        base.OnPaint(pe);
    }
}

Однако, он не скомпилируется, потому что он говорит мне, что я не могу переопределить ширину или высоту. Может кто-нибудь сказать мне, если я подхожу к этому неправильно, или есть ли способ обойти это?

Ответы [ 2 ]

1 голос
/ 25 апреля 2010

Во-первых, обратите внимание, что DefaultValueAttribute на самом деле не устанавливает значения по умолчанию ! Этот атрибут используется только конструктором Windows Forms, чтобы узнать, должно ли оно отображать свойство в окне «Свойства» обычным или жирным шрифтом; если свойство имеет значение, отличное от аргумента, переданного DefaultValueAttribute, свойство отображается жирным шрифтом.

Чтобы установить размер по умолчанию , вы можете:

  1. переопределяет свойство DefaultSize (как показано в ответе @ Jarek) или

  2. установить свойство Size в конструкторе (хотя это решение не так элегантно).

0 голосов
/ 25 апреля 2010

Ширина и Высота не являются виртуальными элементами (проверьте класс Control в Reflector ), поэтому самый простой способ - переопределить свойство DefaultSize:

        protected override Size DefaultSize
        {
            get
            {
                return new Size(840, 340);
            }
        }

Вы также можете использовать новый модификатор , но для этого примера я рекомендую переопределить DefaultSize. Если вы проверите класс управления в Reflector, вы увидите, что высота и ширина используют много внутренних / частных членов. Так что я не думаю, что реализация всех этих вещей - хорошая идея. Просто используйте свойство DefaultSize.

...