Элементы 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
и генератор кода будет генерировать код для содержимого объекта (страниц), а не для самого объекта.