[WinForm]IrisSkin面板的基本使用以及單獨控制元件樣式設定
阿新 • • 發佈:2019-01-22
介紹
IrisSkin 是為Microsoft Visual Studio dotNET開發的最易用的介面增強dotNET(WinForm)元件包。它能完全自動的為您的應用程式新增支援換膚功能,甚至不需要更改您的設計好的Form以及新增一行程式碼!您也不再需要花費很多時間來使得自己的應用程式更漂亮。
IrisSkin提供一個強大的元件SkinEngine元件來幫助您完成這一切所有的工作。您需要做的,只是將一個SkinEngine元件拖放到您設計的主Form上,並且設定一些屬性,然後所有的Form以及對話方塊,都會自動的在執行時支援換膚功能。您也可以輕易的讓應用程式回覆到原始Windows風格。
使用
1.在WinForm中新增資原始檔後,將喜歡的面板拖放至裡面,如圖:
後臺程式碼:
public static SkinEngine AppSkin { get; set; }
#endregion
#region 建構函式
public frmMain()
{
InitializeComponent();
}
private void frmMain_Load(object sender, EventArgs e)
{
InitBasic();
InitCom();
SetSkinFile(skin, LHResource.Page);
}
private void SetSkinFile(SkinEngine skin, byte[] bytes)
{
using (MemoryStream memoryStream = new MemoryStream(bytes))
{
skin.SkinStream = memoryStream;
AppSkin = skin;
}
}
#endregion
執行效果如圖 2.若想設定某個控制元件的背景顏色,會發現無法修改的的情況,這時候需要設定需要修改控制元件的tag屬性即可,下面以修改Button控制元件為例:
Bitmap btnbmp = null;
/// <summary>
/// 修改button控制元件的背景顏色
/// </summary>
/// <param name="button"></param>
private void ChangButtonColor(Button button)
{
if (btnbmp == null)
{
btnbmp = new Bitmap(button.Width, button.Height);
using (Graphics g = Graphics.FromImage(btnbmp))
{
Rectangle r = new Rectangle(0, 0, btnbmp.Width, btnbmp.Height);
using (LinearGradientBrush br = new LinearGradientBrush(
r,
Color.Red,
Color.DarkRed,
LinearGradientMode.Vertical))
{
g.FillRectangle(br, r);
}
}
}
CrossThreadOperate.InvokeControlAction<Button>(button, delegate(Button btn)
{
btn.ForeColor = Color.White;
btn.BackgroundImage = btnbmp;
btn.Tag = frmMain.AppSkin.DisableTag;
});
}
/// <summary>
/// 還原button控制元件背景顏色
/// </summary>
/// <param name="button"></param>
public void ReturnToBtnColor(Button button)
{
CrossThreadOperate.InvokeControlAction<Button>(button, delegate(Button btn)
{
btn.UseVisualStyleBackColor = true;
btn.Tag = null;
});
}
private void SetButtonBackColor<T>(T t, Button button) where T : Control
{
foreach (Control ctrl in t.Controls)
{
if (ctrl is Button)
{
Button btnTemp = (Button)ctrl;
if (btnTemp.Name == button.Name)
ChangButtonColor(button);
else
ReturnToBtnColor(btnTemp);
}
}
}
使用程式碼
private void btnFInitPLC_Click(object sender, EventArgs e)
{
SetButtonBackColor<GroupBox>(gpFunction, btnFInitPLC);
SetTabPageVisible(tbcMain, tpInitPLC);
}
實現效果
相關程式碼:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
public class CrossThreadOperate
{
public static void InvokeControlAction<t>(t cont, Action<t> action) where t : Control
{
if (cont.InvokeRequired)
{
cont.Invoke(new Action<t, Action<t>>(InvokeControlAction), new object[] { cont, action });
}
else
{
action(cont);
}
}
}