Как добавить свойства формы в группу и показать в окне свойств Windows и быть редактируемым - PullRequest
0 голосов
/ 16 февраля 2012

У меня есть этот класс:

public class MyProps
{
    public MyProps()
    {

    }

    protected string myVar;
    public string MyProperty
    {
        get { return myVar; }
        set { myVar = value; }
    }

    protected int myOtherVar;
    public int MyOtherProperty
    {
        get { return myOtherVar; }
        set { myOtherVar = value; }
    }
}

Что я хочу добавить в свою форму, поэтому, когда я унаследую ее, я смогу заполнить свойства в свойстве MyPropsX.

У меня есть этот код в моей форме:

    protected  MyProps propsX = new MyProps();

    [TypeConverter(typeof(ExpandableObjectConverter))]
    public  MyProps MyPropsX
    {
        get
        {
            return propsX;
        }
        set
        {
            propsX = value;
        }
    }

Теперь свойства MyProperty и MyOtherProperty красиво отображаются в окне свойств, и я могу установить их значения прямо там.

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

Чего мне не хватает? Должен ли я наследовать свой класс MyProps от определенного специального класса или интерфейса? Или какой-то особый атрибут?

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

Это немного для комментария и, возможно, для вашего решения, поэтому я отвечаю на ваш комментарий ответом вместо другого комментария:

С does not happen when I put properties directly on a form вы имеете в виду, что вы используетеДизайнер, чтобы установить некоторые свойства формы.Они будут записаны в файл MyForm.designer.cs.Когда вы войдете в код вашего класса, вы найдете в конструкторе метод InitializeComponent().Установите курсор на него нажатием F12 .Здесь вы можете увидеть, что дизайнер написал во всех свойствах.Вы должны уважать комментарий выше упомянутого метода и не начинать изменять код с помощью редактора кода, если вы действительно не понимаете, как и когда дизайнер будет читать и писать код здесь (это еще одна глава, которую я могу объяснить при необходимости).В противном случае может случиться, что попытка открыть форму в конструкторе после изменения кода приведет к сообщению об ошибке или потере кода.

Если вы также хотите установить какое-либо значение по умолчанию, вам следует вернуться в конструктори добавьте необходимый код инициализации ниже функции InitializeComponent(), и все должно работать как положено.

Обновление

Как вы уже написали в своем комментарии, вы уже знаете, как Дизайнер взаимодействует с * .designer.Файл .cs.Так что я действительно не могу понять вашу конкретную проблему, но, возможно, одна из этих статей может дать вам более полное представление о том, как Microsoft написала свои компоненты:

0 голосов
/ 16 февраля 2012

Это очень нормально, так как каждый раз, когда вы закрываете форму и открываете ее снова, у вас появляется новый экземпляр из формы MyPropsX, поэтому лучшим способом было бы сохранить ваши свойства в любой базе данных (sql, доступ, текстовые файлы, ...)

...