Форма в подклассе не работает должным образом в представлении конструктора (VS 2008) - PullRequest
0 голосов
/ 20 сентября 2008

Я вложил в подкласс Form, чтобы включить некоторые дополнительные функции, которые сводятся к List<Image>, который отображается в наборе предопределенных мест в форме. У меня есть следующее:

public class ButtonForm : Form 
{
    public class TitleButton
    {
        public TitleButton() { /* does stuff here */ }
        // there's other stuff too, just thought I should point out there's
        // a default constructor.
    }

    private List<TitleButton> _buttons = new List<TitleButton>();
    public List<TitleButton> TitleButtons
    {
        get { return _buttons; }
        set { _buttons = value; }
    }
    // Other stuff here
}

Тогда моя фактическая форма, которую я хочу использовать, это подкласс ButtonForm вместо Form. Все это прекрасно работает, дизайнер даже подбирает новое свойство и показывает его в списке свойств. Я думал, что это будет здорово! Это показало коллекцию, я мог добавить кнопки туда и далеко я пошел бы. Итак, я открыл редактор коллекций, добавил все объекты, и вот, сидя в конструкторе, была картинка с прекрасным видом на то, что я хотел.

Это то место, где оно начинает становиться безобразным. По какой-то причине Designer отказывается генерировать код для создания объектов и присоединения их к коллекции, поэтому, хотя в режиме «Дизайн» он выглядит великолепно, как только я его компилирую и запускаю, все снова исчезает, и я снова возвести в квадрат Я в полной растерянности относительно того, почему это произойдет; если Дизайнер может сгенерировать его достаточно хорошо, чтобы получить идеальное изображение моей формы с дополнительным поведением, почему он не может / не может генерировать код в реальном файле кода?

1 Ответ

3 голосов
/ 20 сентября 2008

Прежде всего вам необходимо унаследовать ваш класс TitleButton от Component, чтобы разработчик знал, что это компонент, который можно создать с помощью сгенерированного дизайнером кода. Затем вам нужно указать генератору кода разработчика работать с содержимым коллекции, а не с самим экземпляром коллекции. Поэтому попробуйте следующее ...

public class TitleButton : Component
{
   // ... 
}

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public List<TitleButton> TitleButtons
{
   // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...