c# winform主题实现的方法
winform的主题实现没有bs里面那么舒服,下面做了一个简单实现,记录一下。
1、一个接口,需要做主题的控件、窗体都要实现这个接口
//////使用主题的控件、窗体需要实现此接口 /// publicinterfaceIThemeControl { IThemeThisTheme{get;set;} //////重置主题 /// voidResetTheme(); }
2、一个主题接口
//////主题 /// publicinterfaceITheme { intCode{get;} //////初始化 /// voidInit(); }
3、一个主题控制类
//////主题设置 /// publicclassTheme { internaldelegatevoidCheckedThemeEventHandle(IThemetheme); //////改变主题事件 /// staticinternaleventCheckedThemeEventHandleCheckedThemeEvent; staticIThemecurrentTheme; //////当前主题 /// internalstaticIThemeCurrentTheme { get{returncurrentTheme;} set { if(value==null) return; currentTheme=value; currentTheme.Init(); if(CheckedThemeEvent!=null) { CheckedThemeEvent(value); } } } //////加载控件的主题 /// ///internalstaticvoidLoadTheme(IThemeControlcontrol) { control.ResetTheme(); } }
4、添加一个窗体通用的主题接口
publicinterfaceIThemeBaseForm { //////基本窗体背景色 /// ColorBaseFormBackgroundColor{get;} //////基本窗体文字颜色 /// ColorBaseFormForeColor{get;} //////标题栏颜色 /// ColorBaseFormTitleColor{get;} }
5、添加对应的窗体或控件的主题接口
窗体的样式接口(例子)
publicinterfaceIThemeFrmLock:IThemeBaseForm { ColorFrmLock_TxtFillColor{get;} ColorFrmLock_TxtRectColor{get;} ColorFrmLock_TxtForeColor{get;} ColorFrmLock_btnFillColor{get;} ColorFrmLock_btnForeColor{get;} ColorFrmLock_btnRectColor{get;} }
控件的样式接口(例子)
publicinterfaceIThemeUCFileItem:ITheme { ColorUCFileItem_BackgroundColor{get;} ColorUCFileItem_ForeColor{get;} ColorUCFileItem_BoxColor{get;} ImageUCFileItem_Img1{get;} ImageUCFileItem_Img2{get;} ImageUCFileItem_Img3{get;} ImageUCFileItem_Img4{get;} ImageUCFileItem_Img5{get;} }
我这里做一个深色一个浅色主题
深色的
//////深色 /// publicpartialclassDark: ITheme, IThemeBaseForm, IThemeFrmLock, IThemeUCFileItem { publicintCode{get{return1;}} //////基本窗体背景色 /// publicColorBaseFormBackgroundColor{get{returnColor.FromArgb(37,41,59);}} //////基本窗体文字颜色 /// publicColorBaseFormForeColor{get{returnColor.White;}} publicColorBaseFormTitleColor{get{returnColor.FromArgb(38,45,67);}} //////初始化操作 /// publicvoidInit() { //这里做一些修改主题时候的业务 } #region重写运算符 //////重写== /// ////// /// publicstaticbooloperator==(Darklhs,IThemerhs) { if(lhs==null&&rhs==null) returntrue; else { if(lhs!=null&&rhs!=null) { if(lhs.Code==rhs.Code) returntrue; else returnfalse; } else returnfalse; } } /// ///重写!= /// ////// /// publicstaticbooloperator!=(Darklhs,IThemerhs) { if(lhs==null&&rhs==null) returnfalse; else { if(lhs!=null&&rhs!=null) { if(lhs.Code==rhs.Code) returnfalse; else returntrue; } else returntrue; } } publicoverrideboolEquals(objectobj) { if(obj==null||GetType()!=obj.GetType()) { returnfalse; } if(objisITheme) { if(Code==((ITheme)obj).Code) returntrue; else returnfalse; } else { returnfalse; } } publicoverrideintGetHashCode() { returnbase.GetHashCode(); } #endregion }
浅色的也一样 只需要实现
- ITheme,
- IThemeBaseForm,
- IThemeFrmLock,
- IThemeUCFileItem
这些接口就行(定义的控件接口,这里都要进行实现)
然后添加具体的控件主题实现类
//////FrmLock /// publicpartialclassDark { publicColorFrmLock_TxtFillColor{get{returnColor.FromArgb(34,40,60);}} publicColorFrmLock_TxtRectColor{get{returnColor.FromArgb(65,75,101);}} publicColorFrmLock_TxtForeColor{get{returnColor.White;}} publicColorFrmLock_btnFillColor{get{returnColor.FromArgb(46,54,76);}} publicColorFrmLock_btnForeColor{get{returnColor.FromArgb(175,193,225);}} publicColorFrmLock_btnRectColor{get{returnColor.FromArgb(65,75,101);}} }
然后就是去控件或窗体里面做事情了,实现接口Theme.IThemeControl,构造函数里面添加CheckedThemeEvent事件
publicpartialclassFrmLock:FrmWithTitle,Theme.IThemeControl { publicFrmLock() { try { InitializeComponent(); Theme.Theme.CheckedThemeEvent+=Theme_CheckedThemeEvent; } catch(Exceptionex) { } } voidTheme_CheckedThemeEvent(Theme.IThemetheme) { if(this.Visible) { ThisTheme=theme; } }
VisibleChanged事件添加内容
privatevoidFrmLock_VisibleChanged(objectsender,EventArgse) { if(Visible) { ThisTheme=Theme.Theme.CurrentTheme; } }
实现的接口
Theme.IThemethisTheme=null; //////当前页面正在使用的主题 /// publicTheme.IThemeThisTheme { get { if(thisTheme==null) { ThisTheme=Theme.Theme.CurrentTheme; } returnthisTheme; } set { if(thisTheme!=value) { thisTheme=value; Theme.Theme.LoadTheme(this); } } } publicvoidResetTheme() { vart=(Theme.IThemeFrmLock)ThisTheme; this.BackColor=t.BaseFormBackgroundColor; this.lblTitle.BackColor=t.BaseFormTitleColor; this.lblTitle.ForeColor=t.BaseFormForeColor; ucControlBase1.FillColor=t.FrmLock_TxtFillColor; ucControlBase1.RectColor=t.FrmLock_TxtRectColor; txtPW.BackColor=t.FrmLock_TxtFillColor; txtPW.ForeColor=t.FrmLock_TxtForeColor; tongyong_btnPaiZhaoPath.FillColor=t.FrmLock_btnFillColor; tongyong_btnPaiZhaoPath.RectColor=t.FrmLock_btnRectColor; tongyong_btnPaiZhaoPath.ForeColor=t.FrmLock_btnForeColor; }
以上就是修改代码,下面看调用
Theme.Theme.CurrentTheme=newTheme.Dark();
效果
作者:冰封一夏
出处:http://www.cnblogs.com/bfyx/
HZHControls官网:http://www.hzhcontrols.com
以上就是c#winform主题实现的方法的详细内容,更多关于c#winform主题实现的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。