最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c# winform主題實現(xiàn)的方法

 更新時間:2021年03月01日 11:53:49   作者:冰封一夏  
這篇文章主要介紹了c# winform主題實現(xiàn)的方法,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下

winform的主題實現(xiàn)沒有bs里面那么舒服,下面做了一個簡單實現(xiàn),記錄一下。

1、一個接口,需要做主題的控件、窗體都要實現(xiàn)這個接口

/// <summary>
 /// 使用主題的控件、窗體需要實現(xiàn)此接口
 /// </summary>
 public interface IThemeControl
 {
  ITheme ThisTheme { get; set; }
  /// <summary>
  /// 重置主題
  /// </summary>
  void ResetTheme();
 }

2、一個主題接口

/// <summary>
 /// 主題
 /// </summary>
 public interface ITheme
 {
  int Code { get; }
  /// <summary>
  /// 初始化
  /// </summary>
  void Init();

 }

3、一個主題控制類

/// <summary>
 /// 主題設(shè)置
 /// </summary>
 public class Theme
 {
  internal delegate void CheckedThemeEventHandle(ITheme theme);
  /// <summary>
  /// 改變主題事件
  /// </summary>
  static internal event CheckedThemeEventHandle CheckedThemeEvent;
  static ITheme currentTheme;
  /// <summary>
  /// 當前主題
  /// </summary>
  internal static ITheme CurrentTheme
  {
   get { return currentTheme; }
   set
   {
    if (value == null)
     return;
    currentTheme = value;
    currentTheme.Init();
    if (CheckedThemeEvent != null)
    {
     CheckedThemeEvent(value);
    }
   }
  }
  /// <summary>
  /// 加載控件的主題
  /// </summary>
  /// <param name="control"></param>
  internal static void LoadTheme(IThemeControl control)
  {
   control.ResetTheme();
  }
 }

4、添加一個窗體通用的主題接口

public interface IThemeBaseForm
 {
  /// <summary>
  /// 基本窗體背景色
  /// </summary>
  Color BaseFormBackgroundColor { get; }
  /// <summary>
  /// 基本窗體文字顏色
  /// </summary>
  Color BaseFormForeColor { get; }
  /// <summary>
  /// 標題欄顏色
  /// </summary>
  Color BaseFormTitleColor { get; }
 }

5、添加對應(yīng)的窗體或控件的主題接口

窗體的樣式接口(例子)

public interface IThemeFrmLock : IThemeBaseForm
 {
  Color FrmLock_TxtFillColor { get; }
  Color FrmLock_TxtRectColor { get; }
  Color FrmLock_TxtForeColor { get; }
  Color FrmLock_btnFillColor { get; }
  Color FrmLock_btnForeColor { get; }
  Color FrmLock_btnRectColor { get; }

 }

控件的樣式接口(例子)

public interface IThemeUCFileItem : ITheme
 {
  Color UCFileItem_BackgroundColor { get; }
  Color UCFileItem_ForeColor { get; }
  Color UCFileItem_BoxColor { get; }
  Image UCFileItem_Img1 { get; }
  Image UCFileItem_Img2 { get; }
  Image UCFileItem_Img3 { get; }
  Image UCFileItem_Img4 { get; }
  Image UCFileItem_Img5 { get; }
 }

我這里做一個深色一個淺色主題

深色的

/// <summary>
 /// 深色
 /// </summary>
 public partial class Dark :
  ITheme,
  IThemeBaseForm,  
  IThemeFrmLock,  
  IThemeUCFileItem  
 {

  public int Code { get { return 1; } }
  /// <summary>
  /// 基本窗體背景色
  /// </summary>
  public Color BaseFormBackgroundColor { get { return Color.FromArgb(37, 41, 59); } }
  /// <summary>
  /// 基本窗體文字顏色
  /// </summary>
  public Color BaseFormForeColor { get { return Color.White; } }
  public Color BaseFormTitleColor { get { return Color.FromArgb(38, 45, 67); } }

  /// <summary>
  /// 初始化操作
  /// </summary>
  public void Init()
  {
   //這里做一些修改主題時候的業(yè)務(wù)
  }
  #region 重寫運算符
  /// <summary>
  /// 重寫==
  /// </summary>
  /// <param name="lhs"></param>
  /// <param name="rhs"></param>
  /// <returns></returns>
  public static bool operator ==(Dark lhs, ITheme rhs)
  {

   if (lhs == null && rhs == null)
    return true;
   else
   {
    if (lhs != null && rhs != null)
    {
     if (lhs.Code == rhs.Code)
      return true;
     else
      return false;
    }
    else
     return false;
   }
  }

  /// <summary>
  /// 重寫!=
  /// </summary>
  /// <param name="lhs"></param>
  /// <param name="rhs"></param>
  /// <returns></returns>
  public static bool operator !=(Dark lhs, ITheme rhs)
  {

   if (lhs == null && rhs == null)
    return false;
   else
   {
    if (lhs != null && rhs != null)
    {
     if (lhs.Code == rhs.Code)
      return false;
     else
      return true;
    }
    else
     return true;
   }
  }


  public override bool Equals(object obj)
  {
   if (obj == null || GetType() != obj.GetType())
   {
    return false;
   }
   if (obj is ITheme)
   {
    if (Code == ((ITheme)obj).Code)
     return true;
    else
     return false;
   }
   else
   {
    return false;
   }
  }


  public override int GetHashCode()
  {
   return base.GetHashCode();
  }
  #endregion
 }

淺色的也一樣  只需要實現(xiàn)

  • ITheme,
  • IThemeBaseForm,      
  • IThemeFrmLock,     
  • IThemeUCFileItem    

這些接口就行(定義的控件接口,這里都要進行實現(xiàn))
然后添加具體的控件主題實現(xiàn)類

/// <summary>
 /// FrmLock
 /// </summary>
 public partial class Dark
 {
  public Color FrmLock_TxtFillColor { get { return Color.FromArgb(34, 40, 60); } }
  public Color FrmLock_TxtRectColor { get { return Color.FromArgb(65, 75, 101); } }
  public Color FrmLock_TxtForeColor { get { return Color.White; } }
  public Color FrmLock_btnFillColor { get { return Color.FromArgb(46, 54, 76); } }
  public Color FrmLock_btnForeColor { get { return Color.FromArgb(175, 193, 225); } }
  public Color FrmLock_btnRectColor { get { return Color.FromArgb(65, 75, 101); } }
 }

然后就是去控件或窗體里面做事情了,實現(xiàn)接口Theme.IThemeControl,構(gòu)造函數(shù)里面添加CheckedThemeEvent事件

public partial class FrmLock : FrmWithTitle,Theme.IThemeControl
 {

  public FrmLock()
  {
   try
   {
    InitializeComponent();    
    Theme.Theme.CheckedThemeEvent += Theme_CheckedThemeEvent;
   }
   catch (Exception ex)
   {
    
   }
  }
  void Theme_CheckedThemeEvent(Theme.ITheme theme)
  {
   if (this.Visible)
   {
    ThisTheme = theme;
   }
  }

VisibleChanged事件添加內(nèi)容

private void FrmLock_VisibleChanged(object sender, EventArgs e)
  {
   if (Visible)
   {
    ThisTheme = Theme.Theme.CurrentTheme;
   }
  }

實現(xiàn)的接口

Theme.ITheme thisTheme = null;
  /// <summary>
  /// 當前頁面正在使用的主題
  /// </summary>
  public Theme.ITheme ThisTheme
  {
   get
   {
    if (thisTheme == null)
    {
     ThisTheme = Theme.Theme.CurrentTheme;
    }
    return thisTheme;
   }
   set
   {
    if (thisTheme != value)
    {
     thisTheme = value;
     Theme.Theme.LoadTheme(this);
    }
   }
  }

  public void ResetTheme()
  {
   var t = (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;
  }

以上就是修改代碼,下面看調(diào)用

Theme.Theme.CurrentTheme = new Theme.Dark();

效果

作者:冰封一夏
出處:http://www.cnblogs.com/bfyx/
HZHControls官網(wǎng):http://www.hzhcontrols.com

以上就是c# winform主題實現(xiàn)的方法的詳細內(nèi)容,更多關(guān)于c# winform主題實現(xiàn)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#的WEBBROWSER與JS交互小結(jié)

    C#的WEBBROWSER與JS交互小結(jié)

    這篇文章主要介紹了C#的WEBBROWSER與JS交互方法,詳細講述了與頁面標簽的交互以及數(shù)據(jù)交互的方法,需要的朋友可以參考下
    2014-11-11
  • C#在后臺運行操作(BackgroundWorker用法)示例分享

    C#在后臺運行操作(BackgroundWorker用法)示例分享

    BackgroundWorker類允許在單獨的專用線程上運行操作。如果需要能進行響應(yīng)的用戶界面,而且面臨與這類操作相關(guān)的長時間延遲,則可以使用BackgroundWorker類方便地解決問題,下面看示例
    2013-12-12
  • C#實現(xiàn)加密與解密詳解

    C#實現(xiàn)加密與解密詳解

    本文詳細講解了C#實現(xiàn)加密與解密詳解的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • C#中如何為枚舉類型添加描述方法【小技巧】

    C#中如何為枚舉類型添加描述方法【小技巧】

    相信很多人對枚舉并不陌生,枚舉可以很方便和直觀的管理一組特定值。下面這篇文章主要給大家介紹了關(guān)于C#中如何為枚舉類型添加描述方法的相關(guān)資料,需要的朋友可以參考下
    2019-02-02
  • c#橋接模式(bridge結(jié)構(gòu)模式)用法實例

    c#橋接模式(bridge結(jié)構(gòu)模式)用法實例

    這篇文章主要介紹了c#橋接模式(bridge結(jié)構(gòu)模式)用法,較為詳細的分析了橋接模式的原理與用法實例,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-12-12
  • C#生成exe可執(zhí)行文件的常用方法

    C#生成exe可執(zhí)行文件的常用方法

    這篇文章主要介紹了C#生成exe可執(zhí)行文件的兩種常用方法,通過圖文結(jié)合的方式講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-07-07
  • c# 開發(fā)語音識別程序

    c# 開發(fā)語音識別程序

    這篇文章主要介紹了用c# 開發(fā)語音識別程序,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-09-09
  • c#保存窗口位置大小操作類(序列化和文件讀寫功能)

    c#保存窗口位置大小操作類(序列化和文件讀寫功能)

    這篇文章主要介紹了c#保存窗口位置大小操作類,其實就是把序列化和文件讀寫合到一塊,大家參考使用
    2013-11-11
  • C#動態(tài)繪制多條曲線的方法

    C#動態(tài)繪制多條曲線的方法

    這篇文章主要為大家詳細介紹了C#動態(tài)繪制多條曲線的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • WPF實現(xiàn)自定義Panel面板的示例詳解

    WPF實現(xiàn)自定義Panel面板的示例詳解

    WPF中的Panel(面板),是繼承自FrameworkElement的抽象類,表示一個可以用來排列子元素的面板,本文主要來和大家聊聊WPF如何實現(xiàn)自定義Panel,感興趣的可以了解下
    2023-09-09

最新評論

兴义市| 安顺市| 张北县| 洪洞县| 大姚县| 化德县| 怀仁县| 博湖县| 杂多县| 冕宁县| 辽宁省| 赞皇县| 桓台县| 东宁县| 珠海市| 南平市| 镇平县| 光山县| 延安市| 新昌县| 堆龙德庆县| 浦县| 高密市| 芒康县| 措勤县| 改则县| 双牌县| 东安县| 三河市| 呼图壁县| 义乌市| 恩施市| 崇义县| 太和县| 青岛市| 会泽县| 霍城县| 嘉祥县| 丰宁| 康马县| 讷河市|