C# 将一个控件的效果转移给另一个控件

法1.清除原本控件的效果,重新在新的控件中写一遍
//读配置文件
                string quotaTreePositon = Function.ProfileString("界面设置", "定额树位置", "右");

                // 如果配置为右,保持添加
                if (quotaTreePositon != "左")
                {
                    panelQuotaSearch.ControlContainer.Controls.Add(control);
                }
                //如果配置为左,清除控件
                if (quotaTreePositon == "左")
                {
                    panelQuotaSearch.ControlContainer.Controls.Clear();
                    
                }

配置文件读取C# 读取ini配置文件-CSDN博客

法2.想要转移效果,实际上只需要修改内容的父节点

找父容器的方法:加断点,添加监视,找parent节点

C# 将一个控件的效果转移给另一个控件_第1张图片

control的父容器是DevExpress.XtraBars.Docking.ControlContainer

因为加了一个if语句,根本没有把儿子加进父容器,所以这里不用先将儿子从父容器中移除。

去找到新的父容器,在这里把儿子直接放进新的父容器。

我的代码新旧容器分布:

旧容器

C# 将一个控件的效果转移给另一个控件_第2张图片

新容器是个group,在AlertManager中,但是旧容器是CostUIProject

C# 将一个控件的效果转移给另一个控件_第3张图片

所以在旧容器中加监视是看不见这个Group的

C# 将一个控件的效果转移给另一个控件_第4张图片

打通。

查找左右引用,找new关键字

C# 将一个控件的效果转移给另一个控件_第5张图片

跳转到new的地方,写get暴露函数

AlertManager alertManager = new AlertManager();
        //11930在创建处传递
        public AlertManager AlertManager
        {
            get { return alertManager; }
            set { }
        }

使用处,先声明:

AlertManager alertManager = null;

在navBarControl的group中增加control控件:

navBarGroup1.ControlContainer.Controls.Add(button1);//语法

要访问Group就要把Group暴露出来

在AlertManager里面写一个get函数

  NavBarGroup quotaGroup;
        public NavBarGroup getGroup()
        {
            return quotaGroup;
        }

在原本的函数中给quotaGroup赋值

C# 将一个控件的效果转移给另一个控件_第6张图片

则在中就可以调用getGroup函数了

alertManager.getGroup();

完整法2代码

//读配置文件
                string quotaTreePositon = Function.ProfileString("界面设置", "定额树位置", "右");

                // 如果配置为右,保持添加
                if (quotaTreePositon != "左")
                {
                    panelQuotaSearch.ControlContainer.Controls.Add(control);
                }
                //如果配置为左,清除控件
                if (quotaTreePositon == "左")
                {
                    //要修改它的父节点实现转移效果
                    NavBarGroup quotaGroup = alertManager.getGroup();
                    quotaGroup.ControlContainer.Controls.Add(control);
                    
                    //这种写法把所有定额查询的控件都清除完了
                    panelQuotaSearch.ControlContainer.Controls.Clear();
                }

报错显示

C# 将一个控件的效果转移给另一个控件_第7张图片

原因是这个container是null

quotaGroup.ControlContainer = new NavBarGroupControlContainer();

改完之后的完整代码:

//读配置文件
                string quotaTreePositon = Function.ProfileString("界面设置", "定额树位置", "右");

                // 如果配置为右,保持添加
                if (quotaTreePositon != "左")
                {
                    panelQuotaSearch.ControlContainer.Controls.Add(control);
                }
                //如果配置为左,清除控件
                if (quotaTreePositon == "左")
                {
                    //要修改它的父节点实现转移效果
                    NavBarGroup quotaGroup = alertManager.getGroup();
                    quotaGroup.ControlContainer = new NavBarGroupControlContainer();
                    quotaGroup.ControlContainer.Controls.Add(control);
                    
                    //这种写法把所有定额查询的控件都清除完了
                    panelQuotaSearch.ControlContainer.Controls.Clear();
                }

你可能感兴趣的:(c#)