打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
WinForm跨线程UI操作常用控件类大全
userphoto

2022.05.08 湖北省

关注
图片来自网络/图文无关
前言
在C#开发的WinForm窗体程序开发的时候,经常会使用多线程处理一些比较耗时之类的操作。不过会有一个问题:就是涉及到跨线程操作UI元素。
相信才开始接触的人一定会遇上这个问题。
为了解决这个问题,可以通过委托来实现。
我为了后期使用更加方便,就将常用的几个控件(TextBox、Label、CheckBox、RadioButton、ProgressBar)UI操作进行了封装,源码可以在github上查看:GitHub仓库地址
源码在github仓库中的XY.WINUI.ControlEx.InvokeEx文件夹中
测试窗体
使用示例
在测试项目中有使用的方法,这里只做简单介绍。
调用方法在Invokes类中,也可以使用单独的类调用。
例如:在窗体中为tbName的TextBox设置和获取值
//首先,使用命名空间using XY.WINUI.ControlEx.InvokeEx;//第一种//设置TextBox的值Invokes.SetTextBoxText(tbName,"TextBox文本");//获取TextBox的值string value = Invokes.GetTextBoxText(tbName);//第二种//设置TextBox的值TextBoxInvoke.SetTextBoxText(tbName,"TextBox文本");//获取TextBox的值string value = TextBoxInvoke.GetTextBoxText(tbName);
帮助类源码
这是部分的代码,需要详细了解可以在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> /// 设置文本框文本 /// </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> /// 设置标签文本 /// </summary> /// <param name="Ctrl"></param> /// <param name="Text"></param> public static void SetLabelText(Label Ctrl, string Text) { LabelInvoke.SetLabelText(Ctrl, Text); } /// <summary> /// 获取标签文本方法 /// </summary> /// <param name="Ctrl"></param> public static string GetLabelText(Label Ctrl) { return LabelInvoke.GetLabelText(Ctrl); ; } #endregion #region // RadioButton /// <summary> /// 获取单选按钮选中状态 /// </summary> /// <param name="Ctrl"></param> /// <returns></returns> public static bool GetRadioButtonChecked(RadioButton Ctrl) { return RadioButtonInvoke.GetRadioButtonChecked(Ctrl); } /// <summary> /// 设置单选按钮选中状态 /// </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> /// 获取选择按钮选中状态 /// </summary> /// <param name="Ctrl"></param> /// <returns></returns> public static bool GetCheckBoxChecked(CheckBox Ctrl) { return CheckBoxInvoke.GetCheckBoxChecked(Ctrl); } /// <summary> /// 设置选择按钮选中状态 /// </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> /// 获取进度条值 /// </summary> /// <param name="Ctrl"></param> public static int GetProgressBarValue(ProgressBar Ctrl) { return ProgressBarInvoke.GetProgressBarValue(Ctrl); } /// <summary> /// 设置进度条值 /// </summary> /// <param name="Ctrl"></param> /// <param name="Value"></param> public static void SetProgressBarValue(ProgressBar Ctrl, int Value) { ProgressBarInvoke.SetProgressBarValue(Ctrl, Value); } /// <summary> /// 获取进度条最小值 /// </summary> /// <param name="Ctrl"></param> public static int GetProgressBarMinValue(ProgressBar Ctrl) { return ProgressBarInvoke.GetProgressBarMinValue(Ctrl); } /// <summary> /// 设置进度条最小值 /// </summary> /// <param name="Ctrl"></param> /// <param name="Value"></param> public static void SetProgressBarMinValue(ProgressBar Ctrl, int Value) { ProgressBarInvoke.SetProgressBarMinValue(Ctrl, Value); } /// <summary> /// 获取进度条最大值 /// </summary> /// <param name="Ctrl"></param> public static int GetProgressBarMaxValue(ProgressBar Ctrl) { return ProgressBarInvoke.GetProgressBarMaxValue(Ctrl); } /// <summary> /// 设置进度条最大值 /// </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> /// 获取控件是否可见委托 /// </summary> /// <param name="Ctrl"></param> private delegate bool GetControlVisibleDelegate(Control Ctrl); /// <summary> /// 设置控件是否可见委托 /// </summary> /// <param name="Ctrl"></param> /// <param name="Visible"></param> private delegate void SetControlVisibleDelegate(Control Ctrl, bool Visible); /// <summary> /// 获取控件是否可见方法 /// </summary> /// <param name="Ctrl"></param> private static bool GetControlVisibleFunc(Control Ctrl) { return Ctrl.Visible; } /// <summary> /// 获取控件是否可见 /// </summary> /// <param name="flag"></param> public static bool GetControlVisible(Control Ctrl) { return (bool)Ctrl.Invoke(new SetControlVisibleDelegate(SetControlVisibleFunc), new object[] { Ctrl }); } /// <summary> /// 设置控件是否可见方法 /// </summary> /// <param name="Ctrl"></param> /// <param name="Visible"></param> private static void SetControlVisibleFunc(Control Ctrl, bool Visible) { Ctrl.Visible = Visible; Ctrl.Refresh(); } /// <summary> /// 设置控件是否可见 /// </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 }}
由于排版问题,就不过多展示代码了,可以在github仓库查看。
会持续更新……
欢迎大家补充。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C# Winform 跨线程更新UI控件常用方法汇总
ASP.NET中采用Reflection机制把页面控件元素和对象联系起来。,ASP.NET...
(新 精)网站设计--创建公共类
.NET Jquery MsSql实现仿百度输入自动补全
背水一战 Windows 10 (20)
如何获取HtmlElement.InvokeMember之后的HTML数据(转)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服