C# Winform代码

功能1:

TextBox控件,只允许输入正负数字和小数,且小数点只能后两位

功能2: 

winform控件启动线程,执行任务

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace WinFormsAppProject
{public partial class Form1 : Form{public Form1(){InitializeComponent();}/// <summary>/// winform 多个textbox只能输入小数 /// 选中控件,属性,右侧有个事件按钮,在下方keypress中选择绑定的事件/// 限制输入,只能输入正负数,且小数点后两位/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void RestrictInput(object sender, KeyPressEventArgs e){if ((e.KeyChar < 48 || e.KeyChar > 57) && e.KeyChar != 8 && e.KeyChar != (char)('.') && e.KeyChar != (char)('-')){e.Handled = true;}if (e.KeyChar == (char)('-')){if ((sender as TextBox).Text != ""){e.Handled = true;}}//第1位是负号时候、第2位小数点不可if (((TextBox)sender).Text == "-" && e.KeyChar == (char)('.')){e.Handled = true;}//负号只能1次if (e.KeyChar == 45 && (((TextBox)sender).SelectionStart != 0 || ((TextBox)sender).Text.IndexOf("-") >= 0))e.Handled = true;//第1位小数点不可if (e.KeyChar == (char)('.') && ((TextBox)sender).Text == ""){e.Handled = true;}//小数点只能1次if (e.KeyChar == (char)('.') && ((TextBox)sender).Text.IndexOf('.') != -1){e.Handled = true;}//小数点(最大到2位)   if (e.KeyChar != '\b' && (((TextBox)sender).SelectionStart) > (((TextBox)sender).Text.LastIndexOf('.')) + 2 && ((TextBox)sender).Text.IndexOf(".") >= 0)e.Handled = true;//光标在小数点右侧时候判断  if (e.KeyChar != '\b' && ((TextBox)sender).SelectionStart >= (((TextBox)sender).Text.LastIndexOf('.')) && ((TextBox)sender).Text.IndexOf(".") >= 0){if ((((TextBox)sender).SelectionStart) == (((TextBox)sender).Text.LastIndexOf('.')) + 1){if ((((TextBox)sender).Text.Length).ToString() == (((TextBox)sender).Text.IndexOf(".") + 3).ToString())e.Handled = true;}if ((((TextBox)sender).SelectionStart) == (((TextBox)sender).Text.LastIndexOf('.')) + 2){if ((((TextBox)sender).Text.Length - 3).ToString() == ((TextBox)sender).Text.IndexOf(".").ToString()) e.Handled = true;}}//第1位是0,第2位必须是小数点if (e.KeyChar != (char)('.') && e.KeyChar != 8 && ((TextBox)sender).Text == "0"){e.Handled = true;}}private void textBox1_KeyPress(object sender, KeyPressEventArgs e){RestrictInput(sender, e);}private void textBox2_KeyPress(object sender, KeyPressEventArgs e){RestrictInput(sender, e);}private void Form1_Load(object sender, EventArgs e){//初始化进度条progressBar1.Maximum = 100;progressBar1.Minimum = 0;progressBar1.Value = 0;}private void button1_Click(object sender, EventArgs e){//开启任务,异步执行,线程池线程,后台线程//窗体还可以拖动,不被阻塞func3();func1();func2();}private void button2_Click(object sender, EventArgs e){//无线程,阻塞UI线程func4();}private void button3_Click(object sender, EventArgs e){//System.InvalidOperationException:“线程间操作无效: 从不是创建控件“progressBar1”的线程访问它。”//可以在程序入口添加 Control.CheckForIllegalCrossThreadCalls = false; //设置不捕获线程异常 解决该问题func5();}private void button4_Click(object sender, EventArgs e){//使用this.BeginInvoke(new EventHandler(delegate{   }));执行异步访问ui线程。使用this.BeginInvoke(mi执行异步过程中不能拖动窗体func6();}private void button5_Click(object sender, EventArgs e){//使用System.Windows.Forms.Timer();;实现异步访问uifunc7();}private void button6_Click(object sender, EventArgs e){//使用Control.CheckForIllegalCrossThreadCalls = false;  再开启任务访问ui控件实现异步,异步执行过程中拖动窗体func5();func2();}private void button7_Click(object sender, EventArgs e){// this.BeginInvoke(mi)在创建控件的基础句柄所在线程上异步执行指定委托func6();和其他任务func2();实现异步。使用this.BeginInvoke(mi执行异步过程中不能拖动窗体func6();func2();}private void func1(){Task.Factory.StartNew(() => {for (int i = 0; i < 5; i++){Debug.WriteLine(i);System.Threading.Thread.Sleep(1000);}});}private void func2(){//开启任务并执行Task.Factory.StartNew(() => {for (int i = 100; i < 105; i++){Debug.WriteLine(i);System.Threading.Thread.Sleep(500);}});}private void func3(){//开启任务并执行Task.Factory.StartNew(() => {System.Threading.Thread.Sleep(5000);Debug.WriteLine(5000);});}//阻塞UI线程private void func4(){int i = 0;while (++i < 100){System.Threading.Thread.Sleep(30);//模拟耗时操作progressBar1.Value = i;}}#region 异步访问UI控件//使用线程访问ui控件时报错:System.InvalidOperationException:“线程间操作无效: 从不是创建控件“progressBar1”的线程访问它。”//可以在程序入口添加 Control.CheckForIllegalCrossThreadCalls = false; //设置不捕获线程异常 解决该问题private void func5(){progressBar1.Value = 0;//开启任务Task task = new Task(() =>{int i = 0;while (++i < 100){System.Threading.Thread.Sleep(30);//模拟耗时操作progressBar1.Value = i;}});task.Start();//执行任务}//使用MethodInvoker mi; this.BeginInvoke(mi)在创建控件的基础句柄所在线程上异步执行指定委托。//解决:System.InvalidOperationException:“线程间操作无效: 从不是创建控件“progressBar1”的线程访问它。”问题private void func6(){progressBar1.Value = 0;#region 使用BeginInvoke虽然解决了跨UI线程访问控件的问题,实现异步,但是涉及到控件访问的过程中,不能拖动窗体。使用 Task.Factory.StartNew()包多一层还是不能拖动窗体。。。。。//Task.Factory.StartNew(() =>//{//    //MethodInvoker mi = new MethodInvoker(() =>//    //{//    //    int i = 0;//    //    while (++i < 100)//    //    {//    //        System.Threading.Thread.Sleep(30);//模拟耗时操作//    //        progressBar1.Value = i;//    //    }//    //});//    //this.BeginInvoke(mi);//    this.BeginInvoke(new EventHandler(delegate//    {//        int i = 0;//        while (++i < 100)//        {//            System.Threading.Thread.Sleep(30);//模拟耗时操作//            progressBar1.Value = i;//        }//    }));//});#endregionthis.BeginInvoke(new EventHandler(delegate{int i = 0;while (++i < 100){System.Threading.Thread.Sleep(50);//模拟耗时操作progressBar1.Value = i;}}));}#endregion#region 使用System.Windows.Forms.Timer();;实现异步访问uiSystem.Windows.Forms.Timer t;private void func7(){t = new System.Windows.Forms.Timer();t.Tick += new EventHandler(TimerTick);//t.Interval = 30;//默认100t.Enabled = true;}private void TimerTick(object sender, EventArgs e){t.Stop();t.Dispose();int i = 0;while (++i < 100){System.Threading.Thread.Sleep(50);//模拟耗时操作progressBar1.Value = i;}}#endregion}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/7848.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多实例任务在工作流中的高级配置与应用

前言 在现代业务流程管理中&#xff0c;多实例任务是一项强大功能&#xff0c;它允许一个任务被多个参与者并行或顺序处理&#xff0c;这在需要会签、集体评审等场景下尤为重要。Activiti作为一款流行的开源工作流引擎&#xff0c;提供了丰富的配置选项来满足多样化的多实例任…

面试分享——描述一个复杂网络问题如何解决

描述一个你成功解决的复杂网络问题 1.问题背景 在我之前的一家网络服务提供商公司工作期间&#xff0c;我们面临了一个复杂的网络故障问题。该公司为客户提供云主机托管服务&#xff0c;其中一个关键客户的应用服务器突然无法与数据库服务器通信&#xff0c;导致其核心业务受…

HackMyVM-Slowman

目录 信息收集 arp nmap whatweb WEB web信息收集 gobuster FTP匿名登录 hydra mysql爆破 mysql登录 fcrackzip爆破 hashcat爆破 ssh登录 提权 系统信息收集 python Capabilities提权 信息收集 arp ┌──(root㉿0x00)-[~/HackMyVM] └─# arp-scan -l Interf…

类加载器aa

一&#xff0c;关系图及各自管辖范围 &#xff08;不赘述&#xff09; 二&#xff0c;查看关系 package com.jiazai;public class Main {public static void main(String[] args) {ClassLoader appClassLoader ClassLoader.getSystemClassLoader();//默认System.out.println…

关于在Conda创建的虚拟环境中安装好OpenCV包后,在Pycharm中依然无法使用且import cv2时报错的问题

如果你也掉进这个坑里了&#xff0c;请记住opencv-python&#xff01;opencv-python&#xff01;&#xff01;opencv-python&#xff01;&#xff01;&#xff01; 不要贪图省事直接在Anaconda界面中自动勾选安装libopencv/opencv/py-opencv包&#xff0c;或者在Pycharm中的解…

Linux搭建http发布yum源

1、搭建http源yum仓库 &#xff08;1&#xff09;在yum仓库服务端安装httpd yum -y install httpd &#xff08;2&#xff09;修改配置文件 我们httpd 中默认提供web 界面的位置是我们/var/www/html 目录&#xff0c;如果我们yum 源想指定目录&#xff0c;就需要修改蓝框2处…

Vue常见的指令

Vue.js 提供了许多内置指令&#xff0c;这些指令可以在模板中用于处理元素的显示、行为等。以下是 Vue.js 中常见的 7 个指令及其详细代码示例&#xff1a; 1、v-bind&#xff1a;用于属性绑定&#xff0c;可以动态更新 HTML 属性。 html<template> <div> <img…

VUE v-for 数据引用

VUE 的数据引用有多种方式。 直接输出数据 如果我们希望页面中直接输出数据就可以使用&#xff1a; {{ pageNumber }}双括号引用的方式即可。 在 JavaScript 中引用 如果你需要直接在代码中使用&#xff0c;直接使用变量名就可以了。 上面这张小图&#xff0c;显示了引用的…

linux 调试-kdb 调试内核-1

目标&#xff1a;打印bcm2835_spi_transfer_one 是如何从用户空间开始调用的 1. kernel 配置 KDB配置选项 添加 spi 控制器驱动 和 spi 设备驱动 2. 调试流程 调试内核-系统启动之后 1. 开发板进入kdb,等待pc 连接 rootraspberrypi:~# echo "ttyS0,115200"…

找不到模块“vue-router”。你的意思是要将 moduleResolution 选项设置为 node,还是要将别名添加到 paths 选项中?

在tsconfig.app.json中添加&#xff0c;记得一定是 tsconfig.app.json 中&#xff0c;如添加到 tsconfig.node.json 还是会报错的 哈哈哈哈&#xff0c;不瞒你们&#xff0c;我就添加错了&#xff0c;哈哈哈。所以这也算写一个demo提醒自己 "compilerOptions": {&qu…

C语言 动态内存管理

目录 1. C/C程序的内存分配2. 动态内存分配的作用3. malloc - 分配内存4. free - 释放内存5. calloc - 分配并清零内存6. realloc - 调整之前分配的内存块7. 常见的动态内存的错误7.1 对空指针解引用7.2 对动态开辟空间的越界访问7.3 对非动态开辟内存使用free7.4 使用free释放…

iOS使用webSocket通信

一、什么是webSocket webSocket是HTML5开始提供的一种浏览器与服务器进行全双工通讯的网络技术&#xff0c;属于应用层协议。它基于TCP传输协议&#xff0c;并复用HTTP的握手通道。对大部分web开发者来说&#xff0c;上面这段描述有点枯燥&#xff0c;其实只要记住几点&#x…

发电机组远程管理,提升管控力,降低运维成本

发电机组是指发电机发动机以及控制系统的总称&#xff0c;用来把发动机提供的动能转化为电能。它通常由动力系统、控制系统、消音系统、减震系统、排气系统组成。发电机组远程管理系统利用物联网技术与PLC远程控制模块集成解决方案&#xff0c;在提高发电机组的运行效率、降低运…

【计算机科学速成课】笔记三——操作系统

文章目录 18.操作系统问题引出——批处理设备驱动程序多任务处理虚拟内存内存保护Unix 18.操作系统 问题引出—— Computers in the 1940s and early 50s ran one program at a time. 1940,1950 年代的电脑&#xff0c;每次只能运行一个程序 A programmer would write one at…

Vue基础——Mixin(混入)

在Vue中&#xff0c;Mixin&#xff08;混入&#xff09;是一种可以重复使用的代码片段&#xff0c;可以包含组件选项&#xff08;如data、methods、computed等&#xff09;以及生命周期钩子函数。Mixin可以在多个组件中共享相同的逻辑或功能&#xff0c;从而实现代码的复用和组…

Django框架四-项目

一、项目准备 1.流程与人员 2.需求分析 项目主要页面 归纳项目主要模块 3.架构设计 项目开发模式 项目架构设计

【C++STL详解(八)】--------stack和queue的模拟实现

目录 前言 一、stack模拟实现 二、queue的模拟实现 前言 前面也介绍了stack和queue的常见接口&#xff0c;我们也知道stack和queue实际上是一种容器适配器&#xff0c;它们只不过是对底层容器的接口进行封装而已&#xff0c;所以模拟实现起来比较简单&#xff01;一起来看看是…

vue2初始化项目环境后运行报错: code: ‘MODULE_NOT_FOUND‘, requireStack: []

尝试1&#xff1a; 方式&#xff1a;npm install 重新安装依赖 结果&#xff1a;无效 尝试2&#xff1a; 方式&#xff1a;参照这篇博客对node_modules文件下.bin中的vue-cli-service.cmd内容进行修改 结果&#xff1a;有效 尝试3&#xff1a; 方式&#xff1a;突然意识…

pxe远程安装

PXE 规模化&#xff1a;可以同时装配多台服务器 自动化&#xff1a;自动安装操作系统和各种配置 不需要光盘U盘 前置需要一台PXE服务器 pxe是预启动执行环境&#xff0c;再操作系统之前运行 实验&#xff1a; 首先先关闭防火墙等操作 [rootlocalhost ~]# systemc…

【busybox记录】【shell指令】uniq

目录 内容来源&#xff1a; 【GUN】【uniq】指令介绍 【busybox】【uniq】指令介绍 【linux】【uniq】指令介绍 使用示例&#xff1a; 去除重复行 - 默认输出 去除重复行 - 跳过第n段&#xff08;空格隔开&#xff09;&#xff0c;比较n1以后的内容&#xff0c;去重 去…