Элементы ControlCollection не могут быть сохранены

Я создал контроль с controlcollection. Когда я добавляю элементы из окна свойств во время разработки. Это добавлено отлично. Также, когда я открываю это назад. Добавленные предметы показывает меня. Но, когда я закрываю форму, затем снова открываю ее, элементы были удалены.

Теперь я добавил два предмета в коллекцию. Предметы выглядели отлично.

Но, когда я открываю Form.Desigern.cs файл следующая строка отсутствует.

this.xWizardControl.Window.Controls.Add(this.xWizardPage1);
this.xWizardControl.Window.Controls.Add(this.xWizardPage2);

Код выглядит так.

public class XWizardPageWindow : DevExpress.XtraEditors.XtraUserControl, ISupportInitialize
{
    private XWizardPageCollection _pages;
    [Browsable(true)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
    public XWizardPageCollection Pages
    {
        get { return _pages; }
        set { _pages = value; }
    }
    public XWizardPageWindow()
    {
    }
    #region Override Methods
    protected override ControlCollection CreateControlsInstance()
    {
        if (_pages == null)
            _pages = new XWizardPageCollection(this);
        return _pages;
    }
    #endregion


    #region ISupportInitialize Members

    public void BeginInit()
    {
        //DO NOTHING
    }

    public void EndInit()
    {
        //DO NOTHING
    }

    #endregion
}

Класс ControlCollection

public class XWizardPageCollection : System.Windows.Forms.Control.ControlCollection
{
    public delegate void XWizardPageEventHandler(object sender, XWizardPageEventArgs e);
    List<XWizardPage> _pages = new List<XWizardPage>();
    #region Constructor
    public XWizardPageCollection(System.Windows.Forms.Control owner): base(owner)
    {}
    #endregion

    #region Override Methods
    public override void Add(System.Windows.Forms.Control value)
    {
        base.Add(value);
        value.Dock = System.Windows.Forms.DockStyle.Fill;
        ((XWizardPage)value).BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
    }
    #endregion

    #region Destructor
    ~XWizardPageCollection()
    {
        GC.SuppressFinalize(this);
    }
    #endregion
}

1 ответ

Решение

Во-первых, никогда не следует изменять ControlCollection после того, как он создан и возвращен CreateControlsInstance. Итак Pages свойство должно быть определено как ReadOnly,

Во-вторых, когда вы используете Visible, вы говорите генератору кода создать новый экземпляр Pagesчто мы не хотим. Так что измените DesignerSerializationVisibilityAttribute из Visible в Content и генератор кода будет генерировать код для содержимого объекта (страниц), а не для самого объекта.

Другие вопросы по тегам