VB怎样设计一简易UI【vb.netui框架 vb 框架】可以试试用VB的shell 函数运行程序
Shell("craft_oper.exe d:\data\Tester_barcode1.XML")
VB.net一个很简单的UI问题花了二十分钟给你写了代码 , 已测试 。建议学习并使用System.Drawing绘制 。
主要是掌握Graphics.FillRectangle和DrawString的使用 。
Imports System.Drawing
Public Class 进度条UI
Public 上面笔刷 As SolidBrush = New SolidBrush(Color.FromArgb(192, 175, 238, 238))
Public 下面笔刷 As SolidBrush = New SolidBrush(Color.FromArgb(192, 30, 144, 255))
Public 文字笔 As SolidBrush = New SolidBrush(Color.FromArgb(255, 255, 255, 255))
Public 字体 As Font = New Font("微软雅黑", 14.0)
Public 文字格式 As StringFormat = New StringFormat() With
{.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center}
''' summary
''' 绘制指定进度的图像 。
''' 当进度变化时调用一次本方法,建议将创建的Graphics对象保存到变量而不要重复创建 。。
''' /summary
''' param name="控件"绘制到此控件的工作区/param
''' param name="g"绘制到控件的Graphics对象,例如 Button1.CreateGraphics()/param
''' param name="进度"进度百分比实数 , 57% = 0.57/param
Public Sub 绘制(ByRef 控件 As Control, ByRef g As Graphics, ByVal 进度 As Double)
Dim 矩形 = 控件.ClientRectangle '获取控件的工作区矩形
Dim 下面高度 = CInt(矩形.Height * 进度) '获取下面颜色块的高度
Dim 中间位置 = 矩形.Top矩形.Height - 下面高度 '获取中间分界线的Y坐标
Dim 上矩形 = New Rectangle(矩形.X, 矩形.Y, 矩形.Width, 矩形.Height - 下面高度)
Dim 下矩形 = New Rectangle(矩形.X, 中间位置, 矩形.Width, 下面高度)
g.FillRectangle(上面笔刷, 上矩形)
g.FillRectangle(下面笔刷, 下矩形)
'绘制文字
Dim 文字 As String = String.Format("{0:0.00}%", 进度 * 100)
g.DrawString(文字, 字体, 文字笔, 矩形, 文字格式)
End Sub
End Class
下面是Form1窗体的代码:添加一个Button1和Timer1控件,将Button1尺寸拖大点
Public Class Form1
Public g As Graphics
Public 进度条UI As New 进度条UI
Public 进度 As Double
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
g = Button1.CreateGraphics()
Timer1.Enabled = Not Timer1.Enabled
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
进度= 0.01
进度条UI.绘制(Button1, g, 进度)
End Sub
End Class
桌面端开发都用什么语言,简单分析下这些语言的优劣势对比?目前,最优的选择有四个vb.netui框架:
1.如果只在win下使用,.net form是不二选择 , 可谓是又快又好,企业应用或定制开发都是相当好的,初学者也可以入手 。
2.electron,跨平台 。需要会前端,必须熟悉js、css和html 。属于前端人员大杀器,如果是初学者,需要一下子学三样东西,再加上electron的进程间通信,可能会被搞懵 。
3. qt5,可以使用qml(js语法)进行UI编程,但是需要懂c艹,但是写软件相当快,还可以写安卓、ios、Linux、嵌入式中的应用 。
4.flutter , 刚刚正式支持win平台的软件开发 。谷歌出的这个东西,适合没有基础的初学者,因为是一个全新的体系,全新的语言,写ios、安卓非常高效,之后还会兼容h5 。如果是初学者可以跟着走,值得尝试 。但是新东西总有一些坑 。
正式项目跨平台建议electron或qt,只用win平台强烈建议微软自己的net 。个人技术尝试建议flutter 。
桌面端开发跨平台的,如果vb.netui框架你是轻量级的项目,那么我推荐你用electron, 目前使用Electron来开发的桌面应用非常多,我们最熟悉的比如Atom,VScode等等 。
而且在github上也能找到许多应用使用了electron 。
electron是Node,Chromium,html,css,js的结合框架,这就需要你有一定的前端基础 。其实只需要了解一下electron的API就行了,其他的就像你在做web是一样的 。
这种方式最大的缺点就是性能,还有透明窗口也有问题 。所以在做需要性能方面占有很大成分的项目时,并不推荐使用这个方式 。
那么其他的,就是最近几年使用比较多的windows directui框架,但它不是跨平台的 。
那么就引出了qt,作为c跨平台的界面框架,这个上手的话,我觉得对一般人是有难度的,因为首先需要扎实的c功底,其次你要熟悉控件的制作原理,因为有时候你需要定制自己的UI控件 。它现在在嵌入式,军工领域非常受欢迎 。但是整个库非常臃肿庞大,而且开发界面的效率也非常低 。如果来做互联网项目,迭代更新的速度根本就跟不上 。
目前都只有大公司会采用,像maya这种生产力型的应用很多是qt做的 。
还有一种是直接使用Cef加js , 比如网易云音乐,就是这么搞的,但是很多和系统平台的交互接口你需要重写,等于是需要自己造轮子 。工作量大,目前没有适合的框架给你套用,也需要扎实的c功底 。
其实pc端的应用基本也就windows会火一些 , 再加一个macos,那么选择qt应该会很好一点,毕竟你自己造一个跨平台的框架,太费时 。总之,做跨平台就意味着,不可能做到既有效率又完美的实现各种功能,许多都要自己摸索 。
win桌面端直接上visual studio?。∪缓竽闶煜な裁从镅裕縱b.net,c#,c都有相应的win桌面工具 。直接用就好了 , 非常好用
编程语言这种东西无所谓,只要能用啥都可以 。主要看你老板需要和你会用什么语言 。
比如 我用AS编安卓程序 , 当然用JAVA 。不过我后台最开始用ASP和ASP.NET来做 , 现在换PHP了 。桌面端用QT或者VB做 。涉及单片机部分控制也用C 。
现在做跨平台的了 开始以QT为主了 。
只要能达到目的啥都可以 。
学会1-2种 换其他的也不是很难 。
对初学者来建议学C起步吧 。
精通一门,重新学个语言入门也就1个月的事 。
PC桌面程序,如果简单一点的,用pyqt5 python的开发难度和周期都比较现实一点
会C用Qt5非常不错写代码效率很高
会js 用atom使用的那个框架
会Python用PyQt写代码很快
会java用JavaFX
看语言咯
还可以用delphi,其firemonkey框架发布8年时间,支持跨平台:win,安卓,ios , macos,linux,后续支持webassembly,界面是控件拖拽布局所见即所得,开发效率较高 。编译生成的是机器码,编译速度快,调试方便,其生成机器码运行效率较高,支持x86,arm的32位64位处理器 。支持跨平台3D界面,蓝牙通讯,定位,重力,摄像等,支持多种SQL,NoSQL数据库 。单个开发工具实现前后端开发 , 跨平台开发 。适合个人和小公司用一套工具实现大部分开发需求 。
主要有以下几种技术
### Duilib
#### 简述
Duilib是在Windows平台上使用最广泛的类库,使用C和XML混合编程,国内很多计算机企业都喜欢使用这个类库,可能是由于他的技术许可比较宽泛的原因 。
适合于界面比较简单的软件,视觉特效丰富,局限于Windows的平台 。例子:360电脑管家 。
#### 优势
#### 劣势
### Gtk、Qt或WxWidget:
#### 简述
三种基本可以做到跨平台的技术,使用C/C开发,使用者广泛 。其中WxWidget使用了API嫁接方式,Qt和Gtk(包括各种绑定技术)使用自绘技术 。
结构严谨,软件可以做的很大很复杂 。例子:WPS和Maya 。
#### 优势
#### 劣势
### Electron:
#### 简介
使用Web技术开发桌面软件,基于Chromium(Chrome)引擎,使用JS编程语言,绝大多数使用者都是原来的网页开发者 。
绝大多数都是爱好者使用,处于“勉强可用”的地步 。
适合大面积静态展示型软件使用 。例子:网易云音乐 。
#### 优势
#### 劣势
### QtQuick(QML)
#### 简述
Qt公司开发的一款基于OpenGL的图形类库,有显卡加速,类似于Duilib 。采用了C与QML混合编程 。QML类似于JavaScript语言 。
QtQuick下一个版本在Qt 6上更加强大,业界期待已久 。
#### 优势
#### 劣势
### Atk、Swing或JavaFX
使用Java语言开发软件,有JDK加持业界积累的众多Java类库支持 。有不输于VS的IDEA加持,本应该更棒,只是现在已经式微了 。
绝大多数使用者都是企业开发(不追求界面美观)、爱好者(开发顺手) 。
### WinForm、WPF或Xamarin:
使用C#开发,WinForm和WPF局限于Windows平台 。有VisualStudio加持使用很爽 。
### Flutter:
使用Dart语言 , 新类库 , bug可能会很多 。
### SwiftUI或Cocoa:
苹果平台原生界面技术,macOS平台内建支持,不是macOS专用软件不推荐 。
### Win32:
经典Windows 平台API,绝大多数只有一些老软件还在使用,不是维护老软件不推荐 。
winform,不二选择
webview2,作为一个浏览器控件嵌入在桌面应用中 , 支持.net core和.net framework
VB.NET的API调用现在我用我所知道的为楼主介绍VB.NET的API调用 , 请楼主浏览一下,看看行不行 。
Windows API就是Windows系统的API函数简称(Application Program Interface,即:应用程序接口函数),它是Windows操作系统提供给各种开发基于Windows平台应用软件的开发语言的一些公用的函数 , 这些函数一般都比较底层 , 所以当各种开发语言使用自带的函数或类库已无法解决问题时 , 调用Windows API函数往往是一种非常直接、有效的解决方法 。但由于在程序中调用Windows API函数一般都很复杂 , 所以对于程序员来说,是否能够灵活的使用Windows API函数,往往也是其水平高低的一个重要标志 。但自从微软推出.Net框架以后,各种开发基于.Net平台下的程序语言 , 如Visual Basic .Net、Visual C#等却很少使用Windows API函数 , 并且微软公司也不像以前那样,提倡在这些.Net开发语言中使用Windows API函数,其主要的原因如下:
1. .Net框架所附带的类库.Net FrameWork SDK是一个内容丰富、功能强大的软件开发包,各种Windows API函数所实现的各种功能几乎都可以在这个软件开发包中找到与之对应的部分 。
2. 微软Visual Basic .Net、Visual C#等目的是编写跨平台的应用程序,如果在Visual Basic .Net、Visual C#等中使用Windows API函数,这也就注定了编写出的程序只能运行于Windows平台之下,而弱化了.NET的跨平台能力 。这也就是为什么微软不提倡在.Net平台调用Windows API函数的原因 。
虽然微软并不提倡在Visual Basic .Net、Visual C#中调用Windows API函数,但由于目前.Net 框架推出时间较短,.Net FrameWork SDK中提供的类库还并不足以完全替换Windows API函数的所有功能,所以在某些时候,.Net开发语言还是必须要调用Windows API函数 。
一.平台调用、托管DLL、非托管DLL简介:
托管DLL就是能够在公共语言运行库(Common Language Runtime,简称CLR)中能够直接引用的 , 并且扩展名为“DLL”的文件 。具体所指就是封装各种命名空间所在的DLL文件 , 如System.dll等 。非托管DLL就是平常所的动态链接库等,其中就包括了封装所有Windows API函数的DLL文件 。各种非托管DLL中的函数在公共语言运行库中不能直接被调用,而需要经过.Net框架提供的“平台调用”服务后才可以 。
“平台调用”是.Net框架为Visual Basic .Net、Visual C#等.Net开发语言提供的一种服务,用以在托管代码中引入各种非托管DLL中封装的函数(其中包括Windows API函数) 。“平台调用”依赖于元数据在运行时查找导出函数并封装其参数 。图01公共语言运行库利用“平台服务”调用非托管DLL中的函数的流程图:
图01:“平台服务”的调用非托管函数的流程图
在托管代码中使用“平台调用”服务调用非托管DLL中封装的函数时,“平台服务”将依次执行以下操作:
1. 查找包含该函数所在的DLL文件 。
2. 如果找到,则将该DLL文件 加载到内存中 。
3. 查找函数在内存中的地址并将其参数推到堆栈上,并封送所需的数据 。
4. 将控制权转移给非托管函数 。这样整个函数调用完成 。
在Visual Basic .Net中使用“平台调用”服务,申明Windows API函数主要有二种具体的实现方法:
1. 使用DllImport特征类来申明Windows API函数 。
2. 使用“Declare”语句来申明Windows API函数 。
这二种方法虽有异曲同工之效 , 但在繁简上却有很大差异 , 第一种方法申明过程比较复杂,很容易在申明Windows API函数时出错,所以并不提倡 。而第二种方法相对简单,并且又保存了以前Visual Basic中的很多语法,所以在平常时大都使用这种方法来申明Windows API函数 。
二.VB.Net查看文件中图标的函数及申明Windows API的方法:
Visual Basic .Net要实现查看文件中的图标,目前只使用.Net FrameWork SDK是无法实现这种功能的 , 正如前面所说,主要是由于.Net FrameWork SDK推出的时间较短,其功能还不可能面面俱到 。解决问题的关键是正确使用Windows API函数,其中所涉及到的Windows API函数主要有二个:其一是获得指定文件中的图标数目;其二是从指定文件的指定位置导出图标的Windows句柄 。这二个函数都位于“Shell32.dll”文件中,并且函数的入口点都为“ExtractIcon” 。下面是在Visual Basic .Net中分别使用DllImport特征类和“Declare”语句申明这二个Windows API函数的具体方法 。
(1).使用DllImport特征类来申明Windows API函数:
下面是在Visual Basic .Net中使用DllImport特征类申明二个Windows API函数的具体示例:
'函数ExtractIcon , 其功能是是从指定文件的指定位置导出图标的Windows句柄 。
< System.Runtime.InteropServices.DllImport ( "Shell32.dll" , EntryPoint := "ExtractIcon" ) > _
Public Function _
ExtractIcon ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As UInt32 ) As System.IntPtr
End Function
'函数Icon_Num , 其功能是获得指定文件中的图标数目
< System.Runtime.InteropServices.DllImport ( "Shell32.dll" , EntryPoint := "ExtractIcon" ) > _
Public Function _
Icon_Num ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As Integer ) As Integer
End Function
在使用DllImport特征类申明Windows API函数时,如果申明的函数名称和函数的入口点相同,则可以在申明Windows API函数时,省略定义函数入口点对应的代码,即EntryPoint对象字段对应的代码,这样声明ExtractIcon函数的代码也可以简化为如下所示:
< System.Runtime.InteropServices.DllImport ( "Shell32.dll" ) > _
Public Function _
ExtractIcon ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As UInt32 ) As System.IntPtr
End Function
(2).使用“Declare”语句来申明Windows API函数:
使用“Declare”语句的确比使用DllImport特征类要简单了许多,下面是在Visual Basic .Net中使用“Declare”语句来声明上述二个Windows API函数的具体方法:
Declare Auto Function ExtractIcon Lib "Shell32.dll" Alias "ExtractIcon" ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As UInt32 ) As System.IntPtr
'声明ExtractIcon函数
Declare Auto Function Icon_Num Lib "Shell32.dll" Alias "ExtractIcon" ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As Integer ) As Integer
'声明Icon_Num函数
在Visual Basic .Net中声明Windows API函数时 , “Declare”语句中Alias关键字的作用相当于使用DllImport特征类中的EntryPoint对象字段 。同样在使用“Declare”语句声明Windows API函数时 , 如果声明的函数和函数的入口点相同,也可以省略Alias关键字对应的代码,所以ExtractIcon函数也可以简化为如下:
Declare Auto Function ExtractIcon Lib "Shell32.dll" ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As UInt32 ) As System.IntPtr
下面就结合一个示例的编写过程来掌握的这二个Windows API函数的具体使用方法,这个示例的作用就是读取指定文件中的图标数目,并显示文件中的图标 。
三.本文中程序的编写、调试和运行环境:
(1).视窗2000高级服务器版 。
(2).Visual Studio .Net 2003企业结构设计版,.Net FrameWork SDK版本号4322 。
四.Visual Basic .Net读取文件中的图标的实现步骤:
下面介绍的示例 , 其功能读取指定文件中包含的图标数目,并把这些图标全部显示出来 。下面是这个示例的实现步骤:
1. 启动Visual Studio .Net 。
2. 选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框 。
3. 将【项目类型】设置为【Visual Basic项目】 。
4. 将【模板】设置为【Windows应用程序】 。
5. 在【名称】文本框中输入【Visual Basic .Net查看文件中的图标】 。
6. 在【位置】的文本框中输入【E:\VS.NET项目】,然后单击【确定】按钮 , 这样在【E:\VS.NET项目】目录中就产生了名称为【Visual Basic .Net查看文件中的图标】文件夹,里面存放着【Visual Basic .Net查看文件中的图标】项目的所有文件 。具体如图02所示:
图02:【Visual Basic .Net查看文件中的图标】项目的【新建项目】对话框
7. 选择菜单【项目】|【添加新项】,在弹出的对话框中的【模板】设置为【模块】,【名称】文本框设置为【Module1.vb】后 。单击【打开】按钮,则在项目中增加了一个模板文件,名称为【Module1.vb】 。
8. 把Visual Stuido .Net的当前窗口切换到Module1.vb的代码编辑窗口,并在其Module1的代码区中添加下列代码,下列代码是用二种方式声明二个Windows API函数:
< System.Runtime.InteropServices.DllImport ( "Shell32.dll" ) > _
Public Function _
ExtractIcon ( ByVal src As System.IntPtr , ByVal strFileName As String , ByVal uiIconIndex As UInt32 ) As System.IntPtr
End Function
'声明ExtractIcon函数
Declare Auto Function Icon_Num Lib "Shell32.dll" Alias "ExtractIcon" ( ByVal src As System.IntPtr , ByVal strFileName As String , ByVal uiIconIndex As Integer ) As Integer
9. 把Visual Studio .Net的当前窗口切换到Form1窗体的设计查看,并从【工具箱】中的【Windows窗体】选项卡中拖入下列组件到Form1窗体:
四个Label组件 , 其中二个用以显示提示信息,另外二个分别用以显示选择的文件名称和这个文件中包含的图标数目 。
一个ListView组件,利用其显示大图标的属性用以显示选定文件中的图标 。
一个OpenFileDialog组件,用以选择要查看图标的文件名称 。
一个ImageList组件,它起的是桥梁的作用,首先把从文件中导出的图标存放到这里,然后再提供ListView组件显示出来 。
一个Button组件 。
10. 按照表01中数值来设定设定组件的主要属性:
组件类型组件名称属性设置结果
FormForm1TextVB.NET查看文件中的图标
Form1MaximizeBoxFalse
Form1MinimizeBoxFalse
Form1FormBorderStyleFixedSingle
ListViewListView1ImageList1LargeImageList
ListView1MultiSelectFalse
ListView1SizeSize ( 380 , 208 )
ButtonButton1Text选择文件
Button1FlatStyleFlat
ImageListImageList1SizeSize ( 32 , 32 )
ImageList1TransparentColorColor.Transparent
LabelLabel1Text文件名称:
Label2Text图标数目:
Label3Text""
Label4 Text"0"
表01:【Visual Basic .Net查看文件中的图标】项目窗体中各组件的主要属性设定数值表
并按照图02中各组件的位置、大小和排列方式来调整窗体中各个组件:
图02:【Visual Basic .Net查看文件中的图标】项目的设计界面
11. 把Visual Studio .Net当前窗口切换到Form.vb的代码编辑窗口,并用下列代码替换Form1.vb中的Button1组件的Click事件的处理代码,下列代码是在Button1组件的Click事件中处理查看文件中图标的功能,具体如下:
Private Sub Button1_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles Button1.Click
If OpenFileDialog1.ShowDialog ( ) = DialogResult.OK Then
'清除组件中的所有项目
ListView1.Items.Clear ( )
ImageList1.Images.Clear ( )
Dim sfName As String = OpenFileDialog1.FileName
Label3.Text = sfName
Dim iIcon_Num As Integer = Icon_Num ( IntPtr.Zero , sfName , -1 )
'显示文件中的图标数目
Label4.Text = iIcon_Num.ToString ( )
Dim i As Integer
For i = 0 To iIcon_Num - 1 Step 1
'强制实现int到uint类型转换
Dim j As UInt32
j = System.Convert.ToUInt32 ( i )
Dim hIcon As System.IntPtr = ExtractIcon ( IntPtr.Zero , sfName , j )
'在imageList1组件中加入当然提取的图标
ImageList1.Images.Add ( Icon.FromHandle ( hIcon ).ToBitmap ( ) )
'在ListView组件中加入一个项目
ListView1.Items.Add ( "第"( i1 ).ToString ( )"个图标" )
'把加入项目的图象索引指向刚才加入图标在imagList1组件中的索引,从而显示图标
ListView1.Items ( i ).ImageIndex = i
Next i
End If
End Sub
12. 至此,在上述步骤都正确执行后,【Visual Basic .Net查看文件中的图标】项目的全部工作就完成了 。单击快捷键F5就可以运行程序,此时单击【选择文件】按钮选择文件后,程序就能够读取这个文件中的图标及其数目,并显示出来了 。具体如图03所示:
图03:【Visual Basic .Net查看文件中的图标】项目的运行界面
五.总结:
解决Visual Basic .Net查看文件中的图标的关键并非是使用.Net框架中提供的类库,而是使用Windows的API函数 。虽然这与利用Visual Basic .Net开发跨平台程序的初衷相违背,但的确不失为一种解决问题的方法 。有些时候通过Windows API函数能够快捷、方便的解决实际问题,而这往往是只使用.Net FrameWork SDK所望尘莫及的,但随着.Net FrameWork SDK内容的不断丰富,各种新的组成部分和新的功能不断加入,可以预见的是,在未来的.Net FrameWork SDK中必将拥有可以替换本文中介绍的二个Windows API函数的组成部分 。
vb.netui框架的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于vb 框架、vb.netui框架的信息别忘了在本站进行查找喔 。
推荐阅读
- 怎么让快手直播全屏,怎么让快手直播全屏播放
- 自媒体拍摄工作有什么用,自媒体拍摄内容有哪些
- 单机游戏2d,单机游戏2D枪战
- 赤壁的即时战略游戏,赤壁之战小游戏
- python快速查看函数 python怎么看函数
- gis985硕士点,gis考研学校
- 单机游戏经营开店,单机游戏经营电脑
- crm系统与erp系统,crm 和erp
- 怎么卸载mysql5.7 怎么卸载mysql数据库然后再重装