Exemplo n.º 1
0
        /// <summary>
        /// 指定した ToolStripContainer 内のすべてのパネル内に子として存在する  ToolStrip コントロールの位置情報をファイルに保存します。
        /// </summary>
        /// <param name="Container"></param>
        /// <param name="fileName"></param>
        public static void Save(ToolStripContainer Container, string fileName)
        {
            List <ToolStripPanelSetting> panelsSetting = new List <ToolStripPanelSetting>();

            foreach (KeyValuePair <string, ToolStripPanel> panel in GetToolStripPanelDictionary(Container))
            {
                List <ToolStripSetting> rows = new List <ToolStripSetting>();
                foreach (ToolStripPanelRow row in panel.Value.Rows)
                {
                    foreach (Control c in row.Controls)
                    {
                        ToolStrip item = c as ToolStrip;

                        if (item == null)
                        {
                            return;
                        }

                        rows.Add(new ToolStripSetting(item.Name, item.Location));
                    }
                }

                rows.Sort();
                panelsSetting.Add(new ToolStripPanelSetting(panel.Key, rows.ToArray()));
            }

            ToolStripdockContainerSetting setting = new ToolStripdockContainerSetting(fileName, panelsSetting.ToArray());

            setting.Save();
        }
Exemplo n.º 2
0
        /// <summary>
        /// 設定ファイルを読み込み、指定したコンテナの状態を復元します。
        /// </summary>
        /// <param name="parentCtrl">Containerを子に持つ最上位の親コントロール、またはメインフォーム。</param>
        /// <param name="Container">状態を復元するコンテナ</param>
        /// <param name="fileName">設定ファイルの保存先ファイルパス</param>
        public static void Load(Control parentCtrl, ToolStripContainer Container, string fileName)
        {
            ToolStripdockContainerSetting dockContainerSetting = new ToolStripdockContainerSetting(fileName);

            dockContainerSetting.Load();

            if (!dockContainerSetting.IsDeserialized)
            {
                return;
            }

            Dictionary <string, ToolStripPanel> allPanels = GetToolStripPanelDictionary(Container);
            Dictionary <string, ToolStrip>      tsDic     = new Dictionary <string, ToolStrip>();

            Dictionary <ToolStrip, ToolStripPanel> remainds = new Dictionary <ToolStrip, ToolStripPanel>();

            // 全パネル内のToolStripコントロールをすべて tsDic に入れ、一度コントロールコレクションをクリアする
            foreach (ToolStripPanel panel in allPanels.Values)
            {
                foreach (Control c in panel.Controls)
                {
                    if (c is ToolStrip)
                    {
                        tsDic.Add(c.Name, (ToolStrip)c);
                        remainds.Add((ToolStrip)c, panel);
                    }
                }
                panel.Controls.Clear();
            }

            // 保存されている順に再度パネルにToolStripを追加していく
            foreach (ToolStripPanelSetting panelSetting in dockContainerSetting.Panels)
            {
                if (!allPanels.ContainsKey(panelSetting.Alignment))
                {
                    continue;
                }

                ToolStripPanel panel = allPanels[panelSetting.Alignment];
                foreach (ToolStripSetting setting in panelSetting.Rows)
                {
                    ToolStrip item = null;

                    if (tsDic.ContainsKey(setting.Name))
                    {
                        item = tsDic[setting.Name];
                    }
                    else if (parentCtrl != null)
                    {
                        // 現在のToolStripContainer内にコントロールが見つからない場合は親のコントロール内から探す
                        foreach (Control c in parentCtrl.Controls.Find(setting.Name, true))
                        {
                            if (c is ToolStrip)
                            {
                                item = (ToolStrip)c;
                                break;
                            }
                        }
                    }

                    if (item != null)
                    {
                        panel.Join(item, setting.Location);
                        remainds.Remove(item);
                    }
                }
            }

            // どこにも追加されずに残ったToolStripをもともとあったパネルに追加する
            foreach (KeyValuePair <ToolStrip, ToolStripPanel> pair in remainds)
            {
                pair.Value.Join(pair.Key, Point.Empty);
            }
        }