zoukankan      html  css  js  c++  java
  • 使用DevExpress改变WinForm皮肤(VS)

    基于步入DevExpress的使用(VS),进一步使用DevExpress改变WinForm皮肤,适合初学者。

    提示:

    1、对于DevExpress菜单中的RepositoryItemComboBox没有EditValue属性,无法直接获取选择的值,但可以在其事件中将其转化为ComboBoxEdit控件来获取。如下:

    private void repositoryItemComboBox1_SelectedValueChanged(object sender, EventArgs e)
    { 
         ComboBoxEdit riComboBox = sender as ComboBoxEdit;
         string skinName = riComboBox.EditValue.ToString();
    } 
    

    2、在设计界面代码如:BaseFormDesigner.cs中,手动给指定控件(RepositoryItemComboBox)添加事件,代码如下:

     this.repositoryItemComboBox1.SelectedValueChanged += new System.EventHandler(this.repositoryItemComboBox1_SelectedValueChanged);
    

      在对应的BaseForm.cs中实现其具体功能,代码如下:

            /// <summary>
            /// 手动添加的 Combobox菜单项值改变时,触发的事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void repositoryItemComboBox1_SelectedValueChanged(object sender, EventArgs e)
            {
                ComboBoxEdit repositoryItemComboBox = sender as ComboBoxEdit;
                this.defaultLookAndFeel1.LookAndFeel.SkinName = repositoryItemComboBox.EditValue.ToString();     
            }
    

    代码间关系:Program类主要注册要使用的皮肤及运行那个界面;CommonFunctions类主要实现共用的函数;BaseForm类继承自DevExpress.XtraEditors.XtraForm,主要实现一些基础共用的操作;SkinSubject类主要积累那些类共用BaseForm类的通用操作或共性(单例、简单观察者来实现);AppFormA、AppFormB类都继承自BaseForm类,共用BaseForm类特性。

    具体实例代码(不含界面设计代码)如下:

     

    Program.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    
    namespace TestExpressSkins
    {
        static class Program
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main()
            {
                DevExpress.UserSkins.BonusSkins.Register();
                DevExpress.UserSkins.OfficeSkins.Register();
                DevExpress.Skins.SkinManager.EnableFormSkins();
                
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                //Application.Run(new BaseForm());
                //Application.Run(new AppFormA());
                Application.Run( AppFormA.Singlon());
            }
        }
    }
    

      

    CommonFunctions.cs

    using DevExpress.XtraBars;
    using DevExpress.XtraEditors;
    using DevExpress.XtraEditors.Repository;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace TestExpressSkins
    {
        class CommonFunctions
        {
            #region 字段
    
            
    
            #endregion
    
            #region 单例
    
            private static CommonFunctions commFuncInstance = null;
    
            private CommonFunctions()
            {
            }
    
            public static CommonFunctions Singlon()
            {
                if (null == commFuncInstance)
                {
                    commFuncInstance = new CommonFunctions();
                }
                return commFuncInstance;
            }
    
            #endregion
    
            #region 共有方法
            /// <summary>
            /// 皮肤全部枚举出来放到一个ComboBoxEdit中
            /// </summary>
            /// <param name="comboBoxEdit"></param>
            public void AddAppStyles2ComboBoxEdit(ComboBoxEdit comboBoxEdit)
            {
                foreach (DevExpress.Skins.SkinContainer skin in DevExpress.Skins.SkinManager.Default.Skins)
                {
                    comboBoxEdit.Properties.Items.Add(skin.SkinName);
                }
            }
    
            /// <summary>
            /// 皮肤全部枚举出来放到一个ComboBoxEdit中
            /// </summary>
            /// <param name="repositoryItemComboBox"></param>
            public void AddAppStyles2RepositoryItemComboBox(RepositoryItemComboBox repositoryItemComboBox)
            {
                foreach (DevExpress.Skins.SkinContainer skin in DevExpress.Skins.SkinManager.Default.Skins)
                {
                    repositoryItemComboBox.Items.Add(skin.SkinName);
                }
            }
    
    
            public void AddAppStyles2BarEditItem(BarEditItem barEditItem)
            {
                string editItemType = barEditItem.GetType().ToString();
                switch (editItemType)
                {
                    case "RepositoryItemComboBox":
                        AddAppStyles2RepositoryItemComboBox(barEditItem.Edit as RepositoryItemComboBox);
                        break;
                    case "RepositoryItem**":
    
                        break;
                    case "RepositoryItem***":
                        
                        break;
    
                }
            }
    
    
    
            #endregion
    
            #region 私有方法
    
    
            public bool tmpFunc()
            {
                bool bFlag = true;
    
                return bFlag;
            }
    
    
            #endregion
        }
    }
    

     SkinSubject.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace TestExpressSkins
    {
        public class SkinSubject
        {
            #region 字段
    
    
            private List<BaseForm> forms = new List<BaseForm>();        //同一样式的对话框集合
    
    
            #endregion
    
            #region 单例
    
            private static SkinSubject subject = null;
    
            public static SkinSubject GetInstance()
            {
                if (subject == null) subject = new SkinSubject();
                return subject;
            }
    
            private SkinSubject() { }
    
            #endregion
    
            #region 共有方法
            /// <summary>
            /// 注册观察者
            /// </summary>
            /// <param name="f"></param>
            public void Register(BaseForm f)
            {
                forms.Add(f);
            }
    
            /// <summary>
            /// 注销观察者
            /// </summary>
            /// <param name="f"></param>
            public void UnRegister(BaseForm f)
            {
                forms.Remove(f);
            }
    
            /// <summary>
            /// 修改每个观察者的皮肤
            /// </summary>
            /// <param name="skinName"></param>
            public void Notify(string skinName)
            {
                foreach (BaseForm f in forms)
                {
                    f.LookAndFeelControl.LookAndFeel.SkinName = skinName;
                }
            }
    
    
            #endregion
    
            #region 私有方法
    
    
    
            #endregion
        }
    }
    

      

    BaseForm.cs

    using DevExpress.LookAndFeel;
    using DevExpress.XtraBars;
    using DevExpress.XtraEditors;
    using DevExpress.XtraEditors.Repository;
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace TestExpressSkins
    {
        public partial class BaseForm : DevExpress.XtraEditors.XtraForm            //Form
        {
            #region 字段
    
            private CommonFunctions commFunc = null;
    
            #endregion
    
            #region 属性
    
            public DefaultLookAndFeel LookAndFeelControl
            {
                set
                {
                }
    
                get
                {
                    return this.defaultLookAndFeel1;
                }
            }
    
            public int tempA
            {
                set
                {
                }
    
                get
                {
                    return 1;
                }
            }
    
            #endregion
    
            #region 构造函数
    
            public BaseForm()
            {
                InitializeComponent();
                commFunc = CommonFunctions.Singlon();
            }
    
            #endregion
    
            #region 对话框或空间相关方法
    
            private void Form1_Load(object sender, EventArgs e)
            {
                commFunc.AddAppStyles2ComboBoxEdit(cmbAppStyle);
                commFunc.AddAppStyles2RepositoryItemComboBox(this.repositoryItemComboBox1);
            }
    
            private void cmbAppStyle_SelectedIndexChanged(object sender, EventArgs e)
            {
                this.defaultLookAndFeel1.LookAndFeel.SkinName = cmbAppStyle.EditValue.ToString();
            }
    
            /// <summary>
            /// 手动添加的 Combobox菜单项值改变时,触发的事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void repositoryItemComboBox1_SelectedValueChanged(object sender, EventArgs e)
            {
                ComboBoxEdit repositoryItemComboBox = sender as ComboBoxEdit;
                this.defaultLookAndFeel1.LookAndFeel.SkinName = repositoryItemComboBox.EditValue.ToString();     
            }
    
            #endregion
    
            #region 私有方法
    
    
    
            #endregion
        }
    }
    

      

    AppFormA.cs

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace TestExpressSkins
    {
        public partial class AppFormA : BaseForm            //Form
        {
            #region 字段
    
            BaseForm appFormB = null;
    
            #endregion
    
            #region 属性
    
            public int tempA
            {
                set
                {
                }
    
                get
                {
                    return 1;
                }
            }
    
            #endregion
    
            #region 单例
    
            private static AppFormA appFormAInstance = null;
    
            #region 构造函数
    
            private AppFormA()
            {
                InitializeComponent();
                SkinSubject.GetInstance().Register(this);
            }
    
            #endregion
    
            public static AppFormA Singlon()
            {
                if (null == appFormAInstance)
                {
                    appFormAInstance = new AppFormA();
                }
                return appFormAInstance;
            }
    
            #endregion
    
            #region 对话框或空间相关方法
    
            private void bGo2B_Click(object sender, EventArgs e)
            {
                //if (null == appFormB)
                //{
                //    appFormB = new AppFormB();
                //}
                appFormB = AppFormB.Singlon();
                this.Hide();
                appFormB.Show();
            }
    
            #endregion
    
            #region 私有方法
    
    
    
            #endregion
        }
    }
    

      

    AppFormB.cs

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace TestExpressSkins
    {
        public partial class AppFormB : BaseForm            //Form
        {
            #region 字段
    
            BaseForm appFormA = null;
    
            #endregion
    
            #region 属性
    
            public int tempA
            {
                set
                {
                }
    
                get
                {
                    return 1;
                }
            }
    
            #endregion
            
            #region 单例
    
            private static AppFormB appFormBInstance = null;
    
            #region 构造函数
    
            private AppFormB()
            {
                InitializeComponent();
                SkinSubject.GetInstance().Register(this);
            }
    
            #endregion
    
            public static AppFormB Singlon()
            {
                if (null == appFormBInstance)
                {
                    appFormBInstance = new AppFormB();
                }
                return appFormBInstance;
            }
    
            #endregion
    
            #region 对话框或空间相关方法
    
            private void bGo2A_Click(object sender, EventArgs e)
            {
                //if (null == appFormA)
                //{
                //    appFormA = new AppFormA();
                //}
                appFormA = AppFormA.Singlon();
                this.Hide();
                appFormA.Show();
            }
    
            #endregion
    
            #region 私有方法
    
    
    
            #endregion
        }
    }
    

      

  • 相关阅读:
    .net程序员书单
    脱敏小软件
    .NET处理HTTP请求
    WPF 按名称查找控件
    软件工程现行国标汇集
    企业应用架构模式读书笔记 第一章 分层
    mysql远程访问
    知道二叉树的先序和中序遍历,重建该二叉树
    微信小程序地图模块
    微信小程序蓝牙模块
  • 原文地址:https://www.cnblogs.com/shenchao/p/4045862.html
Copyright © 2011-2022 走看看