<.Net>使用visual Studio 2022在VB.net中新添自定义画图函数(优化版)

前言
这是基于我之前的一篇博文:
使用visual Studio 2019在VB.net中新添自定义画图函数
在此基础上,我优化了一下,改进了UI,添加了示例功能,即以画圆函数为基础,添加了走马灯功能。
先看一下最终效果:
在这里插入图片描述

1、UI布置
首先大致布局一下窗体控件:
在这里插入图片描述
VB.net的窗体布局很简单,当然同时效果也就那样,如果要UI美观,需要自己设计一下,包括配色以及图片。
但本文不涉及UI美化,可能会在以后单独介绍。

2、画圆函数

   ''' <summary> ''' 在PictureBox中画一个圆''' </summary>''' <param name="p"></param>''' <param name="c"></param>Private Sub huayuan(p As PictureBox, c As Color)Dim b As Bitmap = New Bitmap(p.Width, p.Height)Dim g As Graphics = Graphics.FromImage(b)Dim mybrush As New SolidBrush(c)g.FillEllipse(mybrush, 0, 0, p.Width, p.Height)g.Dispose()p.Image = bEnd Sub

画圆函数还是和之前一样,稍微解释下:
自定义的huayuan函数,有两个参数,一个是PictureBox实例,一个是颜色。
函数内,使用bitmap绘制圆形并填充色块,即我们所需的圆形,然后将bitmap作为image赋予PictureBox的图片属性。
这样我们就在图片框中画了一个圆形。

3、走马灯
如上图,我们一共添加了8个PictureBox,用于实现走马灯,即8个图片框按顺序点亮(由灰色变为红色)。实现这个功能有多种方式,本文选择的是利用定时器来实现。
所以,我们需要在窗体添加一个Timer控件。
在这里插入图片描述
在VB.net中,Timer控件是系统工具箱自带的,可以直接拖到窗体上。
Timer的使用也很简单,设置一下其定时间隔:

Timer1.Interval = NumericUpDown1.Value 

本文中,Timer的间隔可以自定义设置,单位为毫秒。
在这里插入图片描述
Timer设置了时间间隔后,直接调用start,定时器就启动了,每间隔一次,就会触发Tick事件,我们可以在这个Tick事件里去编写我们的逻辑,本文中,就是利用画圆函数给PictureBox轮流画圆。

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tickx += 1'Console.WriteLine(x)If x <= 8 And flag ThenButton1.Enabled = FalseMove_led(x, 1)ElseButton1.Enabled = TrueButton2.Enabled = FalseButton3.Enabled = Falsex = 0Label12.Text = 0Label14.Text = "停止中"'走马灯完成后,恢复初始状态init_led()Timer1.Stop()flag = FalseEnd IfEnd Sub

其中调用的Move_led函数如下:

 ''' <summary>   ''' 走马灯程序''' 为了防止循环阻塞主线程,可以添加异步方式''' </summary>Private Sub Move_led(count As Integer, timedelay As Integer)Label12.Text = count.ToString()For j As Integer = 1 To 8 Step 1Dim str11 = "x" & count.ToString() + "j" & j.ToString()'Console.WriteLine(str11)Dim pic1 As PictureBox = Me.Controls("PictureBox" & j)'Console.WriteLine(pic1.Name)If j = count Thenhuayuan(pic1, Color.Red)Elsehuayuan(pic1, Color.Gray)End If'添加异步等待时间'Await Task.Delay(1)Next'添加异步等待时间'Await Task.Delay(timedelay)End Sub

这里的大致逻辑就是,设置一个计数,在定时器的Tick事件里,每次都判断计数的大小,如果小于8,就根据计数值执行画圆函数,当然此处又有一个判断函数Move_led,用于对8个图片框分别画圆。执行完后,对计数值加1,然后等待下次定时器触发再判断,直到计数值大于8,也就是走马灯结束,那么就恢复初始值。

以下是完整代码:
控件说明:
Form:1,
Button:3,
Label:14,
PictureBox:8,
NumericUpDown:1

Imports System.Threading.Thread
Public Class Form1Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.LoadMe.Text = "走马灯演示"Me.Size = New Size(600, 400)Me.Location = New Point(100, 40)NumericUpDown1.Value = 100'最长间隔100000ms=100sNumericUpDown1.Maximum = 100000'最短间隔10ms=0.01sNumericUpDown1.Minimum = 10Timer1.Interval = 100Label12.Text = 0Label14.Text = "无"Button2.Enabled = FalseButton3.Enabled = Falseinit_led()End SubPrivate Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.ClickTimer1.Interval = NumericUpDown1.ValueTimer1.Start()flag = TrueLabel14.Text = "运行中"Button1.Enabled = FalseButton2.Enabled = TrueButton3.Enabled = FalseEnd SubPrivate Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.ClickTimer1.Stop()flag = FalseButton1.Enabled = TrueLabel14.Text = "停止中"Button1.Enabled = TrueButton2.Enabled = FalseButton3.Enabled = TrueEnd SubPrivate Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.ClickTimer1.Stop()flag = Falsex = 0Label14.Text = "无"Label12.Text = 0Button1.Enabled = TrueButton2.Enabled = FalseButton3.Enabled = FalseFor i As Integer = 1 To 8 Step 1Dim pic1 = Me.Controls("PictureBox" & i)huayuan(pic1, Color.Gray)NextEnd SubDim x As Integer = 0Dim flag As Boolean = FalsePrivate Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tickx += 1'Console.WriteLine(x)If x <= 8 And flag ThenButton1.Enabled = FalseMove_led(x, 1)ElseButton1.Enabled = TrueButton2.Enabled = FalseButton3.Enabled = Falsex = 0Label12.Text = 0Label14.Text = "停止中"'走马灯完成后,恢复初始状态init_led()Timer1.Stop()flag = FalseEnd IfEnd Sub''' <summary>''' 初始化参数''' </summary>Private Sub init_led()'统一为Label赋值For i As Integer = 1 To 8 Step 1Me.Controls("Label" & i).Text = "灯" & iDim pic1 = Me.Controls("PictureBox" & i)huayuan(pic1, Color.Gray)Console.WriteLine(pic1.Name)NextEnd Sub''' <summary>''' 走马灯程序''' 为了防止循环阻塞主线程,可以添加异步方式''' </summary>Private Sub Move_led(count As Integer, timedelay As Integer)Label12.Text = count.ToString()For j As Integer = 1 To 8 Step 1Dim str11 = "x" & count.ToString() + "j" & j.ToString()'Console.WriteLine(str11)Dim pic1 As PictureBox = Me.Controls("PictureBox" & j)'Console.WriteLine(pic1.Name)If j = count Thenhuayuan(pic1, Color.Red)Elsehuayuan(pic1, Color.Gray)End If'添加异步等待时间'Await Task.Delay(1)Next'添加异步等待时间'Await Task.Delay(timedelay)End Sub''' <summary>''' 在PictureBox中画一个圆''' </summary>''' <param name="p"></param>''' <param name="c"></param>Private Sub huayuan(p As PictureBox, c As Color)Dim b As Bitmap = New Bitmap(p.Width, p.Height)Dim g As Graphics = Graphics.FromImage(b)Dim mybrush As New SolidBrush(c)g.FillEllipse(mybrush, 0, 0, p.Width, p.Height)g.Dispose()p.Image = bEnd SubEnd Class

注:事实上本文虽然介绍的是画圆,但可以扩展到任意图形的绘制,只需要对huayuan函数作一些修改即可。我在之前的那篇文章里也说过,本文实际是用于工控行业的上位机编写的一部分,单独列出来,一是方便,作个记录,以便于后来查看,二是如果有这方面需求的朋友,假如能够帮助到你,那么也是非常好的。

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

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

相关文章

Google Chrome Close AutoUpdate

DOMException: play() failed because the user didn‘t interact with the document first.-CSDN博客 html5 audio video-CSDN博客 Google Chrome Close AutoUpdate 关闭google浏览器自动更新 1&#xff1a;检查是否已安装google浏览器&#xff0c;并卸载&#xff1a; 2&…

router路由跳转的两种模板

<router-link><router-link/> <router-view><router-view/> link &#xff1a;链接&#xff0c;联系 view&#xff1a;指看见展现在人们面前的、可以稳定地进行详细审视的事物 将语境拉回到router里&#xff0c;抽象概括一下 router-link就是一个…

55. 右旋字符串(卡码网KamaCoder)

文章目录 55. 右旋字符串题目描述暴力优化&#xff1a;不能申请额外空间&#xff0c;只能在本串上操作思路代码 55. 右旋字符串 题目描述 字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k&#xff0c;请编写一个函数&…

Spark SQL调优实战

1、新添参数说明 // Driver和Executor内存和CPU资源相关配置 --是否开启executor动态分配&#xff0c;开启时spark.executor.instances不生效 spark.dynamicAllocation.enabledfalse --配置Driver内存 spark.dirver.memory5g --driver最大结果大小&#xff0c;设置为0代…

SQLserver2008 r2 下载安装配置、使用、新建登录用户及通过Navicat远程连接

目录 一、下载 二、安装配置 1.安装 2.许可条款 3.安装程序支持文件 4.功能选择 5.实例配置 6.服务器配置 7.数据库引擎配置 8.Reporting Services 配置 9.安装进度 ​编辑 10.完成 三、使用 四、新建登录用户 1.新建登录名 2.常规 3.服务器角色 4. 用户映…

基于CNN+LSTM深度学习网络的时间序列预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 卷积神经网络&#xff08;CNN&#xff09; 4.2 长短时记忆网络&#xff08;LSTM&#xff09; 4.3 CNNLSTM网络结构 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MA…

Java设计模式大全:23种常见的设计模式详解(一)

本系列文章简介&#xff1a; 设计模式是在软件开发过程中&#xff0c;经过实践和总结得到的一套解决特定问题的可复用的模板。它是一种在特定情境中经过验证的经验和技巧的集合&#xff0c;可以帮助开发人员设计出高效、可维护、可扩展和可复用的软件系统。设计模式提供了一种在…

架构学习(四):scrapy下载中间件实现动态切换User-Agent

scrapy下载中间件实现动态与固定UserAgent 前言关卡&#xff1a;实现动态切换User-Agentscrapy设置User-Agent方式梳理User-Agent生效梳理为何选择在下载中间件中实现自定义User-Agent下载中间件 结束 前言 请求头User-Agent是比较常规的反爬手段&#xff0c;不同站点对其检测…

thinkphp6入门(17)-- 网站开发中session、cache、cookie的区别

Session&#xff08;会话&#xff09;: 定义&#xff1a; Session是一种用于在服务器端存储用户信息的机制&#xff0c;以跟踪用户的状态。 数据存储位置&#xff1a; 存储在服务器端&#xff0c;可以存在于内存、数据库或文件系统中。 生命周期&#xff1a; 存在于用户访问应…

离散数学——图论(笔记及思维导图)

离散数学——图论&#xff08;笔记及思维导图&#xff09; 目录 大纲 内容 参考 大纲 内容 参考 笔记来自【电子科大】离散数学 王丽杰

AI助力农作物自动采摘,基于YOLOv3全系列【yolov3tiny/yolov3/yolov3spp】参数模型开发构建作物生产场景下番茄采摘检测计数分析系统

去年十一那会无意间刷到一个视频展示的就是德国机械收割机非常高效自动化地24小时不间断地在超广阔的土地上采摘各种作物&#xff0c;专家设计出来了很多用于采摘不同农作物的大型机械&#xff0c;看着非常震撼&#xff0c;但是我们国内农业的发展还是相对比较滞后的&#xff0…

Dockerfile文件参数配置和使用

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

C# Socket通信从入门到精通(21)——Tcp客户端判断与服务器断开连接的三种方法以及C#代码实现

前言 我们开发的tcp客户端程序在连接服务器以后,经常会遇到服务器已经关闭但是作为客户端的我们不知道,这时候应该应该有一个机制我们可以实时监测客户端和服务器已经断开连接,如果已经断开了连接,我们应该及时报警提示用户客户端和服务器已经断开连接,本文介绍三种可以监…

幸福小院小区中央空调节能改造项目

空调计费是指“中央空调计费”&#xff0c;这种技术实际上是在对水、电、煤气的基础上发展起来的对冷热能量进行计量的一种计费系统技术。 节能改造项目&#xff1a;幸福小院小区&#xff0e; 项目情况需求&#xff1a; 该项目是小区住宅用户建筑&#xff0c;根据功能分区管理…

Vue中路由的使用

目录 1 作用 2 使用方法 2.1 安装路由 2.2 创建路由并导出 2.3 在应用实例中使用vue-router 2.4 声明router-view&#xff0c;展示组件内容 2.5 页面跳转 3 补充内容-子路由 1 作用 能够按不同的访问路径&#xff0c;展示不同组件的内容。 2 使用方法 2.1 安装路由 …

问题:塑瓷后的牙冠要比完成的牙冠大() #学习方法#其他

问题&#xff1a;塑瓷后的牙冠要比完成的牙冠大&#xff08;&#xff09; A.10% B.10%-15% C.15%-20% D.20%-30% E.50% 参考答案如图所示

springboot157基于springboot的线上辅导班系统的开发与设计

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

智能优化算法 | Matlab实现合作优化算法(CSA)(内含完整源码)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 智能优化算法 | Matlab实现合作优化算法(CSA)(内含完整源码) 源码设计 clear clc close SearchAgents_no=30; % Number of search agents Max_iteration=1000;

PiflowX新增Apache Beam引擎支持

参考资料&#xff1a; Apache Beam 架构原理及应用实践-腾讯云开发者社区-腾讯云 (tencent.com) 在之前的文章中有介绍过&#xff0c;PiflowX是支持spark和flink计算引擎&#xff0c;其架构图如下所示&#xff1a; 在piflow高度抽象的流水线组件的支持下&#xff0c;我们可以…

【Leetcode】1696. 跳跃游戏 VI

文章目录 题目思路代码结果 题目 题目链接 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 一开始你在下标 0 处。每一步&#xff0c;你最多可以往前跳 k 步&#xff0c;但你不能跳出数组的边界。也就是说&#xff0c;你可以从下标 i 跳到 [i 1&#xff0c; min(n -…