private void TreeView_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
        {
            if (e.Node.Parent != null)
            {
                e.CancelEdit = true;
                return;
            }

            if (e.Node == m_MainTreeNode)
            {
                e.CancelEdit = true;
                return;
            }

            if (e.Label == string.Empty || e.Label == null)
            {
                e.CancelEdit = true;
                return;
            }

            U50PolicyInfo outPolicyInfo = null;

            if (m_TreeNodePolicyInfo.TryGetValue(e.Node, out outPolicyInfo) == false)
            {
                e.CancelEdit = true;
                return;
            }

            if (outPolicyInfo.Name == e.Label)
            {
                return;
            }

            if (m_PolicyName.Contains(e.Label) == true)
            {
                MainForm.ShowPopupMessage(e.Label, "名称已经存在!");
                e.CancelEdit = true;
                return;
            }

            m_PolicyName.Remove(outPolicyInfo.Name);

            outPolicyInfo.Name = e.Label;

            m_PolicyName.Add(outPolicyInfo.Name);

            PolicyManager.Instance.OnRefreshStockInfo();
        }
        public void NewPolicy()
        {
            if (m_IsInitializing == false)
            {
                ConfigForm_Load(this, EventArgs.Empty);
            }

            U50PolicyInfo policyInfo = new U50PolicyInfo();

            policyInfo.Guid = Guid.NewGuid().ToString();

            do
            {
                policyInfo.Name = string.Format("U50策略{0}", m_PolicyCount++);

                if (m_PolicyName.Contains(policyInfo.Name) == false)
                {
                    break;
                }
            } while (true);

            // U50策略01
            TreeNode newTreeNodePolicy     = new TreeNode(policyInfo.Name);
            TreeNode newTreeNodePolicySub  = new TreeNode("常规选项");
            TreeNode newTreeNodePolicySub1 = new TreeNode("取样方法");
            TreeNode newTreeNodePolicySub2 = new TreeNode("形态函数");
            TreeNode newTreeNodePolicySub3 = new TreeNode("增强刷选");

            newTreeNodePolicy.Nodes.Add(newTreeNodePolicySub);
            newTreeNodePolicy.Nodes.Add(newTreeNodePolicySub1);
            newTreeNodePolicy.Nodes.Add(newTreeNodePolicySub2);
            newTreeNodePolicy.Nodes.Add(newTreeNodePolicySub3);


            PolicyBControl configBControl = new PolicyBControl {
                Dock = DockStyle.Fill, Visible = false
            };

            this.m_AllConfigControlInfo.Add(newTreeNodePolicy, configBControl);
            this.m_AllConfigControlInfo.Add(newTreeNodePolicySub, configBControl);

            this.Panel.Controls.Add(configBControl);

            PolicyCControl configCControl = new PolicyCControl {
                Dock = DockStyle.Fill, Visible = false
            };

            policyInfo.Policy = configCControl.GetConfigPolicy();

            this.m_AllConfigControlInfo.Add(newTreeNodePolicySub1, configCControl);

            this.Panel.Controls.Add(configCControl);

            PolicyDControl configDControl = new PolicyDControl {
                Dock = DockStyle.Fill, Visible = false
            };

            policyInfo.Filtrate = configDControl.GetConfigFiltrate();

            this.m_AllConfigControlInfo.Add(newTreeNodePolicySub2, configDControl);

            this.Panel.Controls.Add(configDControl);

            PolicyEControl configEControl = new PolicyEControl {
                Dock = DockStyle.Fill, Visible = false
            };

            configEControl.EventButtonSetting += new EventHandler(OnEventButtonSetting);
            m_ButtonSetting.Add(configEControl, newTreeNodePolicySub2);
            policyInfo.Extend = configEControl.GetConfigExtend();

            this.m_AllConfigControlInfo.Add(newTreeNodePolicySub3, configEControl);

            this.Panel.Controls.Add(configEControl);

            this.TreeView.Nodes.Add(newTreeNodePolicy);

            this.TreeView.SelectedNode = newTreeNodePolicy;

            m_NewTreeNode.Add(newTreeNodePolicy);

            m_TreeNodePolicyInfo.Add(newTreeNodePolicy, policyInfo);
        }
        private void ButtonOK_Click(object sender, EventArgs e)
        {
            foreach (var item in m_DeleteTreeNode)
            {
                UserControl outConfigControl = null;
                if (this.m_AllConfigControlInfo.TryGetValue(item.Nodes[0], out outConfigControl) == true)
                {
                    if (outConfigControl == m_CurrentConfigControl)
                    {
                        this.TreeView.SelectedNode = m_MainTreeNodeSub;
                    }

                    this.Panel.Controls.Remove(outConfigControl);
                }

                if (this.m_AllConfigControlInfo.TryGetValue(item.Nodes[1], out outConfigControl) == true)
                {
                    if (outConfigControl == m_CurrentConfigControl)
                    {
                        this.TreeView.SelectedNode = m_MainTreeNodeSub;
                    }

                    this.Panel.Controls.Remove(outConfigControl);
                }

                if (this.m_AllConfigControlInfo.TryGetValue(item.Nodes[2], out outConfigControl) == true)
                {
                    if (outConfigControl == m_CurrentConfigControl)
                    {
                        this.TreeView.SelectedNode = m_MainTreeNodeSub;
                    }

                    this.Panel.Controls.Remove(outConfigControl);
                }

                if (this.m_AllConfigControlInfo.TryGetValue(item.Nodes[3], out outConfigControl) == true)
                {
                    if (outConfigControl == m_CurrentConfigControl)
                    {
                        this.TreeView.SelectedNode = m_MainTreeNodeSub;
                    }

                    this.Panel.Controls.Remove(outConfigControl);
                }

                this.m_AllConfigControlInfo.Remove(item.Nodes[0]);
                this.m_AllConfigControlInfo.Remove(item.Nodes[1]);
                this.m_AllConfigControlInfo.Remove(item.Nodes[2]);
                this.m_AllConfigControlInfo.Remove(item.Nodes[3]);
                this.m_AllConfigControlInfo.Remove(item);


                U50PolicyInfo outPolicyInfo = null;
                if (this.m_TreeNodePolicyInfo.TryGetValue(item, out outPolicyInfo) == true)
                {
                    this.m_TreeNodePolicyInfo.Remove(item);
                    PolicyManager.Instance.RemovePolicyInfoByGuid(outPolicyInfo.Guid);
                }
            }

            foreach (var item in m_TreeNodePolicyInfo)
            {
                UserControl outConfigControl = null;
                if (m_AllConfigControlInfo.TryGetValue(item.Key.Nodes[1], out outConfigControl) == false)
                {
                    continue;
                }

                PolicyCControl configCControl = outConfigControl as PolicyCControl;
                if (configCControl == null)
                {
                    continue;
                }

                item.Value.Policy = configCControl.GetConfigPolicy();

                if (m_AllConfigControlInfo.TryGetValue(item.Key.Nodes[2], out outConfigControl) == false)
                {
                    continue;
                }

                PolicyDControl configDControl = outConfigControl as PolicyDControl;
                if (configDControl == null)
                {
                    continue;
                }

                item.Value.Filtrate = configDControl.GetConfigFiltrate();

                if (m_AllConfigControlInfo.TryGetValue(item.Key.Nodes[3], out outConfigControl) == false)
                {
                    continue;
                }

                PolicyEControl configEControl = outConfigControl as PolicyEControl;
                if (configEControl == null)
                {
                    continue;
                }

                item.Value.Extend = configEControl.GetConfigExtend();

                if (m_NewTreeNode.Contains(item.Key) == true)
                {
                    PolicyManager.Instance.AddStockInfo(item.Value);
                }
            }

            U50GlobalSetting.SavePolicySetting(U50GlobalSetting.PolicyFilePath, PolicyManager.Instance.ToArray());
            U50GlobalSetting.SaveGlobalRegistry();

            m_NewTreeNode.Clear();
            m_DeleteTreeNode.Clear();
        }
        private void NewPolicy(U50PolicyInfo policyInfo)
        {
            m_PolicyName.Add(policyInfo.Name);

            // U50策略01
            TreeNode newTreeNodePolicy     = new TreeNode(policyInfo.Name);
            TreeNode newTreeNodePolicySub  = new TreeNode("常规选项");
            TreeNode newTreeNodePolicySub1 = new TreeNode("取样方法");
            TreeNode newTreeNodePolicySub2 = new TreeNode("形态函数");
            TreeNode newTreeNodePolicySub3 = new TreeNode("增强刷选");

            newTreeNodePolicy.Nodes.Add(newTreeNodePolicySub);
            newTreeNodePolicy.Nodes.Add(newTreeNodePolicySub1);
            newTreeNodePolicy.Nodes.Add(newTreeNodePolicySub2);
            newTreeNodePolicy.Nodes.Add(newTreeNodePolicySub3);


            PolicyBControl configBControl = new PolicyBControl();

            configBControl.Dock    = DockStyle.Fill;
            configBControl.Visible = false;

            this.m_AllConfigControlInfo.Add(newTreeNodePolicy, configBControl);
            this.m_AllConfigControlInfo.Add(newTreeNodePolicySub, configBControl);

            this.Panel.Controls.Add(configBControl);

            PolicyCControl configCControl = new PolicyCControl();

            configCControl.Dock    = DockStyle.Fill;
            configCControl.Visible = false;
            configCControl.SetConfigPolicy(policyInfo.Policy);

            this.m_AllConfigControlInfo.Add(newTreeNodePolicySub1, configCControl);

            this.Panel.Controls.Add(configCControl);

            PolicyDControl configDControl = new PolicyDControl();

            configDControl.Dock    = DockStyle.Fill;
            configDControl.Visible = false;
            configDControl.SetConfigFiltrate(policyInfo.Filtrate);

            this.m_AllConfigControlInfo.Add(newTreeNodePolicySub2, configDControl);

            this.Panel.Controls.Add(configDControl);

            PolicyEControl configEControl = new PolicyEControl();

            configEControl.Dock                = DockStyle.Fill;
            configEControl.Visible             = false;
            configEControl.EventButtonSetting += new EventHandler(OnEventButtonSetting);
            m_ButtonSetting.Add(configEControl, newTreeNodePolicySub2);
            configEControl.SetConfigExtend(policyInfo.Extend);

            this.m_AllConfigControlInfo.Add(newTreeNodePolicySub3, configEControl);

            this.Panel.Controls.Add(configEControl);

            this.TreeView.Nodes.Add(newTreeNodePolicy);

            this.TreeView.SelectedNode = newTreeNodePolicy;

            m_TreeNodePolicyInfo.Add(newTreeNodePolicy, policyInfo);
        }