c\#winform 테마 구현 방법
1.하나의 인터페이스,테마 컨트롤,창 이 모두 이 인 터 페 이 스 를 실현 해 야 합 니 다.
/// <summary>
/// 、
/// </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>
///
/// </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.대응 하 는 창 이나 컨트롤 을 추가 하 는 테마 인터페이스창의 스타일 인터페이스(예)
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()
{
//
}
#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
}
연한 색도 똑 같 아 요. 실현 만 하면 돼.그리고 구체 적 인 컨트롤 테마 구현 클래스 를 추가 합 니 다.
/// <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); } }
}
그 다음 에 컨트롤 이나 창 에 가서 일 을 했 습 니 다.인터페이스 Theme.ITheme Control 을 실현 하고 구조 함수 에 Checked ThemeEvent 이 벤트 를 추가 합 니 다.
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 이벤트 추가 내용
private void FrmLock_VisibleChanged(object sender, EventArgs e)
{
if (Visible)
{
ThisTheme = Theme.Theme.CurrentTheme;
}
}
실현 인터페이스
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;
}
이상 은 코드 를 수정 하 는 것 입 니 다.다음은 호출 을 보 겠 습 니 다.
Theme.Theme.CurrentTheme = new Theme.Dark();
효과.저자:빙 봉 일 하
출처:http://www.cnblogs.com/bfyx/
HZHControls 홈 페이지:http://www.hzhcontrols.com
이상 은 c\#winform 테마 실현 방법 에 대한 상세 한 내용 입 니 다.c\#winform 테마 실현 에 관 한 자 료 는 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.