圖片來(lái)自網(wǎng)絡(luò)/圖文無(wú)關(guān)
前言
在C#開(kāi)發(fā)的WinForm窗體程序開(kāi)發(fā)的時(shí)候,經(jīng)常會(huì)使用多線程處理一些比較耗時(shí)之類的操作欣喧。不過(guò)會(huì)有一個(gè)問(wèn)題:就是涉及到跨線程操作UI元素。
相信才開(kāi)始接觸的人一定會(huì)遇上這個(gè)問(wèn)題。
為了解決這個(gè)問(wèn)題妹孙,可以通過(guò)委托來(lái)實(shí)現(xiàn)。
我為了后期使用更加方便获枝,就將常用的幾個(gè)控件(TextBox蠢正、Label、CheckBox省店、RadioButton嚣崭、ProgressBar)UI操作進(jìn)行了封裝,源碼可以在github上查看:GitHub倉(cāng)庫(kù)地址懦傍。
源碼在github倉(cāng)庫(kù)中的XY.WINUI.ControlEx.InvokeEx文件夾中
測(cè)試窗體
使用示例
在測(cè)試項(xiàng)目中有使用的方法雹舀,這里只做簡(jiǎn)單介紹。
調(diào)用方法在Invokes類中粗俱,也可以使用單獨(dú)的類調(diào)用说榆。
例如:在窗體中為tbName的TextBox設(shè)置和獲取值
//首先,使用命名空間
using XY.WINUI.ControlEx.InvokeEx;
//第一種
//設(shè)置TextBox的值
Invokes.SetTextBoxText(tbName,"TextBox文本");
//獲取TextBox的值
string value = Invokes.GetTextBoxText(tbName);
//第二種
//設(shè)置TextBox的值
TextBoxInvoke.SetTextBoxText(tbName,"TextBox文本");
//獲取TextBox的值
string value = TextBoxInvoke.GetTextBoxText(tbName);
幫助類源碼
這是部分的代碼寸认,需要詳細(xì)了解可以在 GitHub 上查看娱俺。
集合類(Invokes.cs)
Invokes.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace XY.WINUI.ControlEx.InvokeEx
{
public class Invokes
{
#region //Controls
#region // TextBox
/// <summary>
/// 設(shè)置文本框文本
/// </summary>
/// <param name="Ctrl"></param>
/// <param name="Text"></param>
public static void SetTextBoxText(TextBox Ctrl, string Text)
{
TextBoxInvoke.SetTextBoxText(Ctrl, Text);
}
/// <summary>
/// 獲取文本框文本方法
/// </summary>
/// <param name="Ctrl"></param>
public static string GetTextBoxText(TextBox Ctrl)
{
return TextBoxInvoke.GetTextBoxText(Ctrl); ;
}
#endregion
#region // Label
/// <summary>
/// 設(shè)置標(biāo)簽文本
/// </summary>
/// <param name="Ctrl"></param>
/// <param name="Text"></param>
public static void SetLabelText(Label Ctrl, string Text)
{
LabelInvoke.SetLabelText(Ctrl, Text);
}
/// <summary>
/// 獲取標(biāo)簽文本方法
/// </summary>
/// <param name="Ctrl"></param>
public static string GetLabelText(Label Ctrl)
{
return LabelInvoke.GetLabelText(Ctrl); ;
}
#endregion
#region // RadioButton
/// <summary>
/// 獲取單選按鈕選中狀態(tài)
/// </summary>
/// <param name="Ctrl"></param>
/// <returns></returns>
public static bool GetRadioButtonChecked(RadioButton Ctrl)
{
return RadioButtonInvoke.GetRadioButtonChecked(Ctrl);
}
/// <summary>
/// 設(shè)置單選按鈕選中狀態(tài)
/// </summary>
/// <param name="Ctrl"></param>
/// <param name="Checked"></param>
public static void SetRadioButtonChecked(RadioButton Ctrl, bool Checked)
{
RadioButtonInvoke.SetRadioButtonChecked(Ctrl, Checked);
}
#endregion
#region // CheckBox
/// <summary>
/// 獲取選擇按鈕選中狀態(tài)
/// </summary>
/// <param name="Ctrl"></param>
/// <returns></returns>
public static bool GetCheckBoxChecked(CheckBox Ctrl)
{
return CheckBoxInvoke.GetCheckBoxChecked(Ctrl);
}
/// <summary>
/// 設(shè)置選擇按鈕選中狀態(tài)
/// </summary>
/// <param name="Ctrl"></param>
/// <param name="Checked"></param>
public static void SetCheckBoxChecked(CheckBox Ctrl, bool Checked)
{
CheckBoxInvoke.SetCheckBoxChecked(Ctrl, Checked);
}
#endregion
#region // ProgressBar
/// <summary>
/// 獲取進(jìn)度條值
/// </summary>
/// <param name="Ctrl"></param>
public static int GetProgressBarValue(ProgressBar Ctrl)
{
return ProgressBarInvoke.GetProgressBarValue(Ctrl);
}
/// <summary>
/// 設(shè)置進(jìn)度條值
/// </summary>
/// <param name="Ctrl"></param>
/// <param name="Value"></param>
public static void SetProgressBarValue(ProgressBar Ctrl, int Value)
{
ProgressBarInvoke.SetProgressBarValue(Ctrl, Value);
}
/// <summary>
/// 獲取進(jìn)度條最小值
/// </summary>
/// <param name="Ctrl"></param>
public static int GetProgressBarMinValue(ProgressBar Ctrl)
{
return ProgressBarInvoke.GetProgressBarMinValue(Ctrl);
}
/// <summary>
/// 設(shè)置進(jìn)度條最小值
/// </summary>
/// <param name="Ctrl"></param>
/// <param name="Value"></param>
public static void SetProgressBarMinValue(ProgressBar Ctrl, int Value)
{
ProgressBarInvoke.SetProgressBarMinValue(Ctrl, Value);
}
/// <summary>
/// 獲取進(jìn)度條最大值
/// </summary>
/// <param name="Ctrl"></param>
public static int GetProgressBarMaxValue(ProgressBar Ctrl)
{
return ProgressBarInvoke.GetProgressBarMaxValue(Ctrl);
}
/// <summary>
/// 設(shè)置進(jìn)度條最大值
/// </summary>
/// <param name="Ctrl"></param>
/// <param name="Value"></param>
public static void SetProgressBarMaxValue(ProgressBar Ctrl, int Value)
{
ProgressBarInvoke.SetProgressBarMaxValue(Ctrl, Value);
}
#endregion
#endregion
#region // Common
#region // Visible
/// <summary>
/// 獲取控件是否可見(jiàn)委托
/// </summary>
/// <param name="Ctrl"></param>
private delegate bool GetControlVisibleDelegate(Control Ctrl);
/// <summary>
/// 設(shè)置控件是否可見(jiàn)委托
/// </summary>
/// <param name="Ctrl"></param>
/// <param name="Visible"></param>
private delegate void SetControlVisibleDelegate(Control Ctrl, bool Visible);
/// <summary>
/// 獲取控件是否可見(jiàn)方法
/// </summary>
/// <param name="Ctrl"></param>
private static bool GetControlVisibleFunc(Control Ctrl)
{
return Ctrl.Visible;
}
/// <summary>
/// 獲取控件是否可見(jiàn)
/// </summary>
/// <param name="flag"></param>
public static bool GetControlVisible(Control Ctrl)
{
return (bool)Ctrl.Invoke(new SetControlVisibleDelegate(SetControlVisibleFunc), new object[] { Ctrl });
}
/// <summary>
/// 設(shè)置控件是否可見(jiàn)方法
/// </summary>
/// <param name="Ctrl"></param>
/// <param name="Visible"></param>
private static void SetControlVisibleFunc(Control Ctrl, bool Visible)
{
Ctrl.Visible = Visible;
Ctrl.Refresh();
}
/// <summary>
/// 設(shè)置控件是否可見(jiàn)
/// </summary>
/// <param name="Ctrl"></param>
/// <param name="Visible"></param>
public static void SetControlVisible(Control Ctrl, bool Visible)
{
Ctrl.Invoke(new SetControlVisibleDelegate(SetControlVisibleFunc), new object[] { Ctrl, Visible });
}
#endregion
#endregion
}
}
由于排版問(wèn)題,就不過(guò)多展示代碼了废麻,可以在github倉(cāng)庫(kù)查看荠卷。
會(huì)持續(xù)更新……
歡迎大家補(bǔ)充。