C#-使用反射取得窗体上的所有控件,针对部分控件初始化样式

本文介绍了一种在系统软件开发中,用于统一界面样式的方法。通过反射机制获取窗体上的所有控件,并根据控件类型自动设置其样式属性,避免重复劳动,提高开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 在作系统软件时,经常有某些模块或者整个软件都会有一个固定的风格。这些风格就凸显了界面的样式,需要去设置一些控件的属性之类的去实现。

  面对这种有统一样式的界面时,避免每个程序员在作界面都要每一个界面去设置相同的属性,我这里整理了一个公共方法。该方法通过传窗体对象,通过反射机制取得窗体上的每一个控件,通过循环判断控件类型,对这些不同类型的控件设置它们的属性。

 

/// <summary>
/// 初始化控件样式
/// </summary>
/// <param name="frm">控件所在窗体</param>
public void InitFormAllControlStyle(Form frm)
        {
            try
            {
                //取得窗体属性
                Type FormType = frm.GetType();
                //取得控件
                FieldInfo[] fi = FormType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
                foreach (FieldInfo info in fi)
                {
                    //设置BarManege样式
                    if (info.FieldType == typeof(DevExpress.XtraBars.BarManager))
                    {
                        DevExpress.XtraBars.BarManager barManege = (info.GetValue(frm)) as DevExpress.XtraBars.BarManager;
                        barManege.AllowCustomization = false;
                        barManege.AllowQuickCustomization = false;
                        barManege.AllowShowToolbarsPopup = false;
                    }                            
                    else if (info.FieldType == typeof(TreeList))
                    {
                        TreeList tr = (info.GetValue(frm)) as TreeList;
                        tr.OptionsView.ShowColumns = false; //是否显示选中的行
                        tr.OptionsBehavior.Editable = false; //不可编辑
                        tr.OptionsView.ShowHorzLines = false; //OptionsView提供对树状列表的显示选项,设置水平线是否显示
                        tr.OptionsView.ShowIndicator = false; //节点的指示面板是否显示
                        tr.OptionsView.ShowVertLines = false; //垂直线条是否显示
                        //设置treeList的折叠样式为 +  - 号
                        tr.LookAndFeel.UseDefaultLookAndFeel = false;
                        tr.LookAndFeel.UseWindowsXPTheme = true;
                        tr.OptionsSelection.InvertSelection = true; //聚焦的样式是否只适用于聚焦细胞或所有细胞除了聚焦对象,失去焦点后
                        foreach (TreeListColumn column in tr.Columns)
                        {
                            column.OptionsColumn.AllowSort = false;
                            column.OptionsFilter.AllowFilter = false;
                        }
                    }
                    else if (info.FieldType == typeof(GridControl))
                    {
                        GridControl grd = (info.GetValue(frm)) as GridControl;
                        var gv = (GridView)grd.MainView;
                        gv.OptionsView.ShowGroupPanel = false;
                        gv.OptionsFind.AlwaysVisible = false;
 
                        //默认设置不可编辑
                        gv.OptionsBehavior.Editable = false;
 
                        gv.OptionsView.ShowIndicator = false;
 
                        //禁用子表显示
                        gv.OptionsDetail.EnableMasterViewMode = false;
 
                        //设置标题和内容居中
                        gv.Appearance.HeaderPanel.TextOptions.HAlignment = HorzAlignment.Center;
                        gv.Appearance.ViewCaption.TextOptions.HAlignment = HorzAlignment.Center;
 
                        //禁用列头的过滤器
                        gv.OptionsCustomization.AllowFilter = false;
 
                        //排序后选择第一行数据
                        gv.EndSorting += gv_EndSorting;
 
                        //列标题,右键禁用
                        gv.OptionsMenu.EnableColumnMenu = false;
                    }
                    else if (info.FieldType == typeof(VGridControl))
                    {
                        VGridControl vgd = (info.GetValue(frm)) as VGridControl;
                        //默认设置不可编辑
                        vgd.OptionsBehavior.Editable = false;
                    }
                    else if (info.FieldType == typeof(PictureEdit))
                    {
                        PictureEdit pic = (info.GetValue(frm)) as PictureEdit;
                        var picName = pic.Name.Substring(3);
                        var picPath = ConfigHelper.ImagePath + picName + ".png";
                        if (File.Exists(picPath))
                        {
                            pic.Image = Image.FromFile(picPath);
                        }
                    }//日期控件默认最小时间为1990-1-1,最大值为2079-1-1
                    else if (info.FieldType == typeof(DateEdit))
                    {
                        DateEdit dateCol = (info.GetValue(frm)) as DateEdit;
                        dateCol.Properties.MinValue = new DateTime(1900, 1, 1);
                        dateCol.Properties.MaxValue = new DateTime(2079, 1, 1);
                    }
                    else
                    {
                        //......
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }
————————————————
版权声明:本文为优快云博主「轻点鼠标」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/qq_35351282/article/details/80728989

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值