ControlCollection中项目无法保存(ControlCollection items c

2019-10-19 12:21发布

我已创建了一个的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
}

Answer 1:

首先,一个人永远不能改变的ControlCollection一旦创建并返回CreateControlsInstance 。 因此, Pages属性应该定义为ReadOnly

其次,使用时可见你告诉代码生成器创建的新实例Pages ,这是我们不想要的。 因此,改变DesignerSerializationVisibilityAttribute从VisibleContent和代码生成器会产生代码的对象(页),而不是对象本身的内容。



文章来源: ControlCollection items could not be saved