WinForms用户控件在设计时加载事件并访问持久性属性

时间:2011-11-16 04:04:33

标签: c# winforms user-controls designer design-time

我创建了一个用户控件,我在那里提供设计时支持。我公开了适当的属性,并且我所需的子控件正确地保存在包含用户控件的父窗体中。

在表单的加载事件中,我需要从" MenuItems"重新构建某些子控件。持久存在的属性(见下面的代码)。每次在Visual Studio IDE中打开表单时,Load事件都会正确触发。第一次打开表单时,集合正确包含所有预期的项目。但是,当我稍后在同一个Visual Studio会话中再次打开表单时,该集合为空。将触发Load事件,但持久性集合为空。如果我关闭Visual Studio并再次打开表单,则集合会再次正确显示预期的项目数。

以下是相关代码。我正在使用第三方DevExpress NavBarControl,在那里我从一个持久化的集合重建菜单项。这些项是生成父代表格的代码(MenuItems是持久化的集合):

public partial class MyUserControl : UserControl
{
    private List<NavBarItem> menuItems = new List<NavBarItem>(15);

    [Browsable(false),
       DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    public List<NavBarItem> MenuItems
    {
       get
       {
           return this.menuItems;
       }
    }

    public MyUserControl()
    {
        InitializeComponent();
    }

    private void NavOptionsControl_Load(object sender, EventArgs e)
    {
        foreach (NavBarItem item in this.menuItems)
        {
            NavBarItemLink link = new NavBarItemLink(item);
            this.navBarGroup.ItemLinks.Add(item);
            item.LinkClicked += new NavBarLinkEventHandler(NavBarItem_LinkClicked);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您是否尝试过布局活动?或者可能是油漆事件?