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

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

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

 

/// 
/// 初始化控件样式
/// 
/// 控件所在窗体
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;
            }
        }

 

 

 

 

 

 

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