Как создать пользовательский элемент управления .NET winforms, который обновляет конструктор? - PullRequest
1 голос
/ 29 января 2010

Я создал пользовательский элемент управления следующим образом (простой пример):

public class MyButton : Button
{
    public MyButton()
    {
        BackColor = Color.Blue;
    }
}

После компиляции он отображается на панели инструментов дизайнера форм и отображается с обновленным свойством. Но если я изменю цвет, элементы управления, которые я уже использую в форме, сохранят свой первоначальный цвет.

Есть ли способ спроектировать элемент управления, который распространит его изменения на дизайнера?

Ответы [ 3 ]

5 голосов
/ 29 января 2010

Проблема в том, что кнопки, которые вы уронили в форму перед редактированием класса, уже инициализируются вызовом формы InitializeComponent () другого цвета. Другими словами, они переопределяют цвет по умолчанию, который вы установили в конструкторе. Что вам нужно сделать, так это объявить значение свойства по умолчанию, чтобы конструктор не генерировал назначение. Это должно выглядеть так:

using System;
using System.Drawing;
using System.ComponentModel;
using System.Windows.Forms;

class MyButton : Button {
    public MyButton() {
        BackColor = Color.Blue;
    }
    [DefaultValue(typeof(Color), "Blue")]
    public override Color BackColor {
        get { return base.BackColor; }
        set { base.BackColor = value; }
    }
}
1 голос
/ 29 января 2010

Я не знаю, возможно ли это, но я знаю, что при перетаскивании элемента управления в конструктор выполняется его конструктор. Вот почему ваша кнопка сначала будет синей, а потом не изменит цвет.

0 голосов
/ 29 января 2010

Вы устанавливаете значение по умолчанию в конструкторе для свойства BackColor, когда вы запускаете конструктор, он фактически устанавливает значения по умолчанию из конструктора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...