私はデザインタイムサポートを提供しているユーザーコントロールを作成しました。私は適切なプロパティを公開し、必要な子コントロールは、ユーザーコントロールを含む親フォームに正しく保持されています。WinFormsユーザーコントロールデザイン時にイベントをロードし、永続プロパティにアクセス
フォームのロードイベントで、永続化された「MenuItems」プロパティ(下記のコードを参照)から特定の子コントロールを再構築する必要があります。 Visual Studio IDEでフォームを開くたびにLoadイベントが正しく発生します。初めてフォームが開かれたとき、コレクションにはすべての予想される項目が正しく含まれています。ただし、後で同じVisual Studioセッションでフォームを開くと、コレクションは空になります。 Loadイベントは発生しますが、永続化されたコレクションは空です。 Visual Studioを閉じてフォームをもう一度開くと、コレクションにアイテムの予想数が正しく表示されます。
以下は関連するコードです。私は永続化されたコレクションからメニューアイテムを再構築するサードパーティのDevExpress NavBarControlを使用しています。アイテムは、親のフォームに生成されたコード(のMenuItem持続しますコレクションです)、次のとおりです。
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);
}
}
}
確認のためだけに、フォームを破棄して後で新しいフォームを作成しますか? – user978122
私の質問は、ランタイムではなく、デザイン時についてです。この親フォームにユーザーコントロールが含まれているVisual Studio Designerで親フォームを開く方法について説明しています。 – Elan