精华内容
下载资源
问答
  • VB.NET窗体继承

    2021-02-07 11:32:45
    对比第一次敲的机房收费系统,会发现很多窗体的界面基本相同,部分功能甚至基本相似。比如说操作员菜单下的充值和退卡这两个窗体: 这样如果一个一个窗体画出来,就做了很多重复的工作。VB.NET和C#都是完全面向...

    对比第一次敲的机房收费系统,会发现很多窗体的界面基本相同,部分功能甚至基本相似。比如说操作员菜单下的充值和退卡这两个窗体:

    在这里插入图片描述
    在这里插入图片描述

    这样如果一个一个窗体画出来,就做了很多重复的工作。VB.NET和C#都是完全面向对象的语言,而面向对象的三大特性是封装、继承、多态,出了在代码、功能上来体现,在设计窗体时是不是也可以用到呢?答案当然是YES!
    
    如果一个程序中有多个界面相似,就可以考虑通过继承来实现,先建立一个父窗体,然后让子窗体来继承它,相同的代码就可以写在父窗体中,各自的功能分别写在不同的子窗体中,实现想要的功能。
    

    具体实现过程如下:

    1.添加普通的Windows窗体,建立模板。(建好后需要重新生成解决方案)

    在这里插入图片描述

    2.选择项目菜单下的添加新项,在弹出的窗体中做如下选择:

    在这里插入图片描述

    3.选择“添加”按钮,在弹出的窗体中选择要继承的父窗体,点确定即可。(如果第1步没有重新生成解决方案,那么在这里父窗体就不会显示出来。)

    在这里插入图片描述

    4.继承来的充值vb.net教程子窗体:

    在这里插入图片描述

    基本上已经完成了,但是会发现继承来的子窗体中的控件都是锁定的,如果想要通过这些控件添加一些新的功能,就需要将父窗体中的控件Modifiers属性设置为Public,这样就可以了。
    
    
    
    当我们做了很多重复的事情时,就应该停下来思考一下,有没有更好的方法。思想是行动的先导,首先要思考,然后再行动。
    
    展开全文
  • 网络上也有很这方面处理的方法,线程或者BackGroudWorker组件。而且大部分采用了Singleton单一模式方法。  疑问: 1.大部分复杂操作是在后台操作(另外一个线程),由主线程的创建一个子线程来操作。能否在子线程...

        在实际应用中遇到长时间计算分析,让用户等待的时候,窗体如果没有处理好,一般会出现假死状态。网络上也有很多这方面处理的方法,多线程或者BackgroundWorker组件。而且大部分采用了Singleton单一模式方法。

        疑问

    1.大部分复杂操作是在后台操作(另外一个线程),由主线程的创建一个子线程来操作。能否在子线程操作的过程中弹出一个等待提示窗体吗?由子线程和等待提示窗体自己完成一切的操作。

    正常的做法是:在后台执行工作中,发送信息给主线程UI。

    疑问1是本文的重点:某个线程A(可以是主线程或者子线程)创建一个包含有等待提示窗体的线程B,由A发送信息给B。那么线程A的父线程或者主进程就不用理会A和B了。

    2.如果有多个子线程在处理分析,那么Singleton单一模式一个窗体来显示等待提示信息的话,一个窗体显示不同几组提示信息,就不大好了,或者提示信息的显示就会乱。

        为了解决以上的疑问,参考了本论坛和博客园的几位高人的思路,写了一个允许多个等待提示窗体的程序,本人水平有限,拍砖就拍砖吧,望大家指点更好的方法或思路。

    参考链接:

    http://www.cnblogs.com/xiaozhi_5638/p/3457499.html 

    http://blog.csdn.net/lzmtw/article/details/763155

    正常做法有两种等待模式:引用第一个链接的插图:


    图1 等待模式,后台工作没有完成之前,UI界面不允许操作。


    图2,非等待模式,后台工作没完成之前,UI界面可以操作。

    本文的疑问的处理方法:


    图3,简单做法,任务大的话UI线程理论上还是会有阻塞。但可以解决UI空间不足等问题。


    图4 推荐做法,不必每次都写更新UI线程的界面,复杂任务执行中自己处理等待提示消息,主UI不必去理会A和B。


        如果有多个等待提示窗体,那么就会有多个过程产生多个提示窗体,而且为了让等待提示窗体不阻碍主线程的操作,那么必须将等待提示窗体封装起来。

    封装在一个类里面,而且窗体的运行模式应该是在另外一个线程里面。同时等待提示窗体允许创建他的线程发送提示信息给他,等待提示窗体接收到信息后显示出来。

    程序主要内容有:

    1.一个等待提示窗体:FrmMsgWaitingFor

    窗体有几种组合模式:

    Public Enum eWaitingFormType
        Message  '只显示提示信息
        Progress  '只显示进度条 由于进度无法预测,默认设置Stype属性设为Marquee
        MessageAndProgress  '显示信息和进度条
        MessageAndWorking  '显示信息和加载动画
    End Enum

    2.一个可以创建等待提示窗体的类似工厂的类:MsgWaitingFactory

    此类需要完成的工作:

    2.1可以创建出不同的等待提示窗体。

    2.2在另外一个线程中创建窗体并显示,让调用本类的线程(可以主线程或者某个子线程)与等待提示窗体线程分离。

    2.3主线程可以通过这个类的实例来发送信息给等待提示窗体,也可以通知和关闭等待提示窗体。

    3.调用方法:

    调用MsgWaitingFactory方法可以是主线程调用,也可以是子线程调用:也就是上面所说的A和B的调用:

    Dim msgWaiter As New MsgWaitingFactory(eWaitingFormType.MessageAndWorking)
    msgWaiter.Show()
    msgWaiter.SendMsgToWaiter("开始复杂计算分析...")
    '......
    '复杂计算分析过程中
    msgWaiter.SendMsgToWaiter("提示信息...")
    '......
    msgWaiter.SendMsgToWaiter("处理完毕.")
    msgWaiter.Close()

    当然,因为FrmMsgWaitingFor有简单的用跨线程的安全处理,也可以直接调用这个窗体:

    Dim frm As New FrmMsgWaitingFor(eWaitingFormType.MessageAndWorking,Me)
    frm.Show()
    frm.SetMessage("working...")
    frm.SetMessage("update UI...")
    frm.SetMessage("Finish.")
    frm.Close()

    等待提示窗体设计界面如下:


    源代码:MsgWaitingFactory

    Imports System.Threading
    
    Public Class MsgWaitingFactory
    
        Private _threadWaiter As Thread
        Private _frmWaiter As FrmMsgWaitingFor
        Private _eFormType As eWaitingFormType
        Private _MyParentForm As Form
    
        '------------------------------------------------------
    	'Singleton单一模式
        'Private Shared ReadOnly objLock As New Object
        'Private Shared _curFrm As FrmMsgWaitingFor
    
        'Public Shared ReadOnly Property CurrentWaitingForForm(e As eWaitingFormType) As FrmMsgWaitingFor
        '    Get
        '        SyncLock objLock
        '            If _curFrm Is Nothing Then
        '                _curFrm = New FrmMsgWaitingFor(e)
        '            End If
        '            Return _curFrm
        '        End SyncLock
        '    End Get
        'End Property
        '------------------------------------------------------
    
        Public Sub New(e As eWaitingFormType)
            _eFormType = e
        End Sub
    
        '------------------------------------------------------
        Public Sub New(e As eWaitingFormType, ParentForm As Form)
            _eFormType = e
            _MyParentForm = ParentForm
        End Sub
      
        Public Sub SendMsgToWaiter(msg As String)
            If _frmWaiter IsNot Nothing Then _frmWaiter.SetMessage(msg)
        End Sub
     
        Public Sub SendMsgToWaiter(msg As String, isTitle As Boolean)
            If _frmWaiter IsNot Nothing Then
                If isTitle Then
                    _frmWaiter.SetFormText(msg)
                Else
                    _frmWaiter.SetMessage(msg)
                End If
            End If
        End Sub
    
        Public Sub Show()
            If _threadWaiter IsNot Nothing Then
                Try
                    _threadWaiter.Abort()
                    _threadWaiter = Nothing
                Catch ex As ThreadStartException
    
                End Try
            End If
            '---------------------
            _threadWaiter = New Thread(New ThreadStart(Sub()
                                                           _frmWaiter = New FrmMsgWaitingFor(_eFormType)
                                                           '_frmWaiter.MdiParent = _MyParentForm
                                                           Application.Run(_frmWaiter)
                                                       End Sub))
            '---------------------
            _threadWaiter.IsBackground = True
            _threadWaiter.SetApartmentState(ApartmentState.STA)
            _threadWaiter.Start()
        End Sub
        
    
        Public Sub Close()
            '-----------
            'If _threadWaiter IsNot Nothing Then
            '    Try
            '        'Application.OpenForms("FrmMsgWaitingFor").Close()跨线程有异常
            '        'Application.OpenForms("FrmMsgWaitingFor").Dispose()
            '        _threadWaiter.Abort()  '终止线程,也有异常。
            '        _threadWaiter.DisableComObjectEagerCleanup()
            '    Catch ex As ThreadStartException
    
            '    End Try
            'End If
            '--此方法让窗体自动执行在其线程上关闭
            If _frmWaiter IsNot Nothing Then
                _frmWaiter.SetCloseForm()
            End If
    
        End Sub
    
    End Class
    

    源代码:FrmMsgWaitingFor   (部分代码参考水如烟的)

    Public Class FrmMsgWaitingFor
    
        Protected Delegate Sub SetControlText(ByVal ctr As Control, ByVal s As String)
    
        Public Sub New(e As eWaitingFormType)
            InitializeComponent()
            Select Case e
                Case eWaitingFormType.Message
                    HideWorkingImg()
                    Me.ProgressBarMain.Visible = False
                Case (eWaitingFormType.Progress)
                    HideWorkingImg()
                    Me.LabelMessage.Visible = False
                Case eWaitingFormType.MessageAndProgress
                    HideWorkingImg()
                Case eWaitingFormType.MessageAndWorking
                    Me.ProgressBarMain.Visible = False
            End Select
        End Sub
    
        Private Sub HideWorkingImg()
            Me.PicWorking.Visible = False
            Me.PicWorking.Image = Nothing
        End Sub
    
        Protected Sub OnSetControlText(ByVal ctr As Control, ByVal s As String)
            If ctr.InvokeRequired Then
                Dim m As New SetControlText(AddressOf OnSetControlText)
                Me.Invoke(m, New Object() {ctr, s})
            Else
                ctr.Text = s
            End If
            Application.DoEvents()
        End Sub
    
        Public Sub SetFormText(ByVal s As String)
            OnSetControlText(Me, s)
        End Sub
    
        Public Sub SetMessage(ByVal s As String)
            OnSetControlText(Me.LabelMessage, s)
        End Sub
    
        Public Sub SetMessage(ByVal format As String, ByVal args() As Object)
            SetMessage(String.Format(format, args))
        End Sub
    
        Public Sub SetCloseForm()
            If Me.InvokeRequired Then
                Dim mi As New MethodInvoker(AddressOf SetCloseForm)
                Me.Invoke(mi)
            Else
                Me.Close()
            End If
        End Sub
    
    End Class
    

    --执行界面:



    可以收工了,不过还要以下问题没处理:

    1.由于程序调用:     Application.Run(_frmWaiter) 是在当前线程上运行标准应用程序消息循环,主界面会暂时失去焦点。应该有办法解决。不过可以同时允许多个等待提示窗体程序,等窗体关闭后,主界面重新得到焦点。

    2.进度条没有处理Stype为:Blocks 百分比显示效果。

    3.其他跨线程等问题。

    4.如果有人想到:说到底还不如在后台执行工作中,发送信息给主线程更新UI不就得了,那么你有可能没明白我想表达的意思。

    5.其他扩展,等待提示窗体在一定时间后自动关闭,窗体的控制,美化,位置控制等,如在右下角提示。

    展开全文
  • 示例Demo2_1用PyQt5的一些类创建了一个简单的GUI应用程序窗体窗体上的标签对象的创建和属性设置都完全由代码完成。显然这种纯代码方式构造UI的方式是比较麻烦的,特别是在窗体上组件比较、层次比较复杂的时候...

    示例Demo2_1用PyQt5的一些类创建了一个简单的GUI应用程序,窗体及窗体上的标签对象的创建和属性设置都完全由代码完成。显然这种纯代码方式构造UI的方式是比较麻烦的,特别是在窗体上组件比较多、层次比较复杂的时候,纯代码方式构造界面的工作量和难度可想而知。

    Qt提供了可视化界面设计工具Qt Designer,以及Qt Creator中内置的UI Designer。可视化地设计UI窗体可以大大提高GUI应用程序开发的工作效率。

    本节通过示例Demo2_2演示如何用UI Designer可视化设计UI窗体,然后转换为Python程序,再构建为Python的GUI程序。主要工作步骤如下。

    (1)在UI Designer中可视化设计窗体。

    (2)用工具软件pyuic5将窗体文件(.ui文件)转换为Python程序文件。

    (3)使用转换后的窗体的Python类构建GUI应用程序。

    2.2.1 用UI Designer可视化设计窗体

    在Qt Creator中点击菜单项“File”→“New File or Project…”,在出现的对话框里选择“Qt”分组里的“Qt Designer Form”(如图2-2所示),这将创建一个单纯的窗体文件(.ui文件)。

    在图2-2的对话框中点击“Choose…”按钮后,出现如图2-3所示的窗体模板选择界面。窗体模板主要有以下3种。

    • Dialog模板,基于QDialog类的窗体,具有一般对话框的特性,如可以模态显示、具有返回值等。
    • Main Window模板,基于QMainWindow类的窗体,具有主窗口的特性,窗口上有主菜单栏、工具栏、状态栏等。
    • Widget模板,基于QWidget类的窗体。QWidget类是所有界面组件的基类,如QLabel、QPushButton等界面组件都是从QWidget类继承而来的。QWidget类也是QDialog和QMainWindow的父类,基于QWidget类创建的窗体可以作为独立的窗口运行,也可以嵌入到其他界面组件内显示。
    cef26fb5ba203fbca96bbb1c84c38227.png

    图2-2 新建窗体对话框

    51a0adfb3b396cbdedd62d93784cf61a.png

    图2-3 选择Widget模板

    在图2-3的界面上选择Widget模板。点击“Next”按钮后,在出现的对话框里设置文件名为FormHello.ui,文件保存到Demo2_2的目录下,再根据向导提示完成创建即可。创建了窗体后就可以在Qt Creator内置的UI Designer里可视化设计窗体,图2-4是在窗体上放置了标签和按钮,并设置好各种属性后的界面。

    图2-4的UI Designer窗口有以下一些功能区域。

    • 组件面板。窗口左侧是界面设计组件面板,分为多个组,如Layouts、Buttons、Display Widgets等,界面设计的常用组件都可以在组件面板里找到。
    • 中间区域是待设计的窗体。如果要将某个组件放置到窗体上,从组件面板上拖动一个组件放到窗体上即可。例如,放一个Label组件和一个PushButton组件到窗体上。
    • Action编辑器(Action Editor)和Signals Slots编辑器(Signals Slots Editor),位于待设计窗体下方。Action编辑器用于设计Action,Signals Slots编辑器用于可视化地进行信号与槽的关联,后面会介绍其具体使用。
    • 对象浏览器(Object Inspector)。窗口右上方是对象浏览器,用树状视图显示窗体上各组件之间的布局和包含关系,视图有两列,显示每个组件的对象名称(objectName)和类名称。
    • 属性编辑器(Property Editor)。窗口右下方是属性编辑器,显示某个选中的组件或窗体的各种属性及其值,可以在属性编辑器里修改这些属性的值。

    主窗口上方有窗体设计模式和布局管理工具栏,最左侧还有一个工具栏,这些功能在后面详细介绍Qt Creator的使用时再具体介绍。

    1d02df314fc1cdb803bee6c6754b15fb.png

    图2-4 在Qt Creator里可视化设计窗体

    在设计窗体上用鼠标点选一个组件,在属性编辑器里会显示其各种属性,并且可以修改其属性。例如,图2-5是选中窗体上放置的标签组件后属性编辑器的内容。

    50bf61cfe2324bff84a9461b33932117.png

    图2-5 界面组件的属性编辑器

    图2-5展示的属性编辑器的最上方显示的文字“LabHello: QLabel”表示这个组件是一个QLabel类的组件,objectName是LabHello。属性编辑器的内容分为两列,其中Property列是属性的名称,Value列是属性的值。属性又分为多个组,实际上表示了类的继承关系,例如在图2-5中,可以看出QLabel的继承关系是QObject→QWidget→QFrame→QLabel。

    objectName是组件的对象名称,界面上的每个组件都需要一个唯一的对象名称,以便被引用。界面上的组件的命名应该遵循一定的法则,具体使用什么样的命名法则根据个人习惯而定,主要目的是便于区分和记忆,也要便于与普通变量相区分。

    设置组件属性的值只需在属性编辑器里进行修改即可,例如设置LabHello的text属性为“Hello, by UI Designer”,只需如图2-5所示那样修改text属性的值即可。

    表2-1是所设计的窗体,以及窗体上的标签和按钮的主要属性的设置。

    表2-1 窗体以及各组件的主要属性设置

    objectName类名称属性设置备注FormHelloQWidgetwindowTitle=”Demo2_2”设置窗体的标题栏显示文字btnCloseQPushButtonText=”关闭”设置按钮的显示文字LabHelloQLabelText=”Hello, by UI Designer” Font.PointSize=12 Font.bold=True设置标签显示文字和字体

    窗体设计完成后,将这个窗体保存为文件FormHello.ui。

    提示:一般情况下,保存的.ui文件名与窗体的objectName名称一致,这样通过文件名就可以直接知道窗体的名称。

    窗体文件FormHello.ui实际上是一个XML文件,它记录了窗体上各组件的属性以及位置分布。FormHello.ui的XML文件内容不必去深入研究,它是由UI Designer根据可视化设计的窗体自动生成的。使用IDLE的文件编辑器就可以打开FormHello.ui文件,下面是FormHello.ui文件的内容。

    <?xml version="1.0" encoding="UTF-8"?>FormHello00283156Demo2_2504018916 Hello, by UI Designer100907523关闭

    2.2.2 将ui文件编译为py文件

    使用UI Designer设计好窗体并保存为文件FormHello.ui后,要在Python里使用这个窗体,需要使用PyQt5的工具软件pyuic5.exe将这个ui文件编译转换为对应的Python语言程序文件。

    pyuic5.exe程序位于Python安装目录的Scripts子目录下,如“D:Python37Scripts”,这个路径在安装Python时被自动添加到了系统的PATH环境变量里,所以可以直接执行pyuic5命令。

    在Windows的cmd窗口里用cd指令切换到文件FormHello.ui所在的目录,然后用pyuic5指令编译转换为Python文件。例如,假设文件FormHello.ui保存在目录“G:PyQt5BookDemochap02demo2_2”下,依次执行下面的指令:

    cd G:PyQt5BookDemochap02demo2_2pyuic5 –o ui_FormHello.py FormHello.ui

    其中,pyuic5的作用是将文件FormHello.ui编译后输出为文件uiFormHello.py。编译输出的文件名可以任意指定,在原来的文件名前面加“ui”是个人命名习惯,表明ui_FormHello.py 文件是从FormHello.ui文件转换来的。

    为了避免重复地在cmd窗口里输入上述指令,可以创建一个文件uic.bat保存到项目Demo2_2的目录下。bat文件是Windows的批处理文件,uic.bat文件的内容只有一条语句,如下:

    pyuic5 -o ui_FormHello.py FormHello.ui

    在Windows资源管理器里双击uic.bat文件就会执行该文件里的语句,也就是将文件FormHello.ui编译为ui_FormHello.py。

    编译后在FormHello.ui文件所在的同目录下生成了一个文件ui_FormHello.py,用IDLE的文件编辑器打开这个文件,其内容如下:

    # -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'FormHello.ui'## Created by: PyQt5 UI code generator 5.12## WARNING! All changes made in this file will be lost!from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_FormHello(object): def setupUi(self, FormHello): FormHello.setObjectName("FormHello") FormHello.resize(283, 156) self.LabHello = QtWidgets.QLabel(FormHello) self.LabHello.setGeometry(QtCore.QRect(50, 40, 189, 16)) font = QtGui.QFont() font.setPointSize(12) font.setBold(True) font.setWeight(75) self.LabHello.setFont(font) self.LabHello.setObjectName("LabHello") self.btnClose = QtWidgets.QPushButton(FormHello) self.btnClose.setGeometry(QtCore.QRect(100, 90, 75, 23)) self.btnClose.setObjectName("btnClose") self.retranslateUi(FormHello) QtCore.QMetaObject.connectSlotsByName(FormHello) def retranslateUi(self, FormHello): _translate = QtCore.QCoreApplication.translate FormHello.setWindowTitle(_translate("FormHello
    展开全文
  • VB讲课笔记06:窗体与常用控件

    千次阅读 2018-03-10 17:24:29
    窗体设计是整个VB应用程序设计的基础。一个窗体对应一个代码模块。 1、窗体设计分类 (1)单窗体设计:应用程序中只包含一个窗体,即单文档窗体。 (2)多重窗体设计:应用程序中包含窗体,即个单文档窗体...

    目录

    一、窗体设计

    1、窗体设计分类

    2、窗体常用属性

    设置窗体背景图片的两种方法

    3、窗体常用事件

    任务1、每单击窗体一次,让窗体缩小1/3。

    任务2、设置窗体背景图片(静态方式、动态方式)

    4、窗体常用方法

    案例:测试窗体常用方法

    5、多重窗体程序如何设置启动对象(窗体或Sub_Main过程)

    6、加载窗体与卸载窗体

    二、控件概述

    1、控件概念

    2、VB控件分类

    三、标签控件

    1、标签概述

    2、标签常用属性

    标签控件示例

    四、文本框

    1、文本框概述

    2、文本框常用属性

    3、文本框常用事件

    4、焦点

    5、获得焦点的方法

    案例1、计算圆周长、圆面积与球体积

    五、按钮

    1、按钮概述

    2、按钮常用属性

    3、按钮常用事件

    案例:用户登录(标签、文本框和按钮)

    六、图片框与图像框

    1、图片框属性

    2、图像框属性

    3、图像框与图片框的区别

    4、图片框和图像框的事件和方法

    案例:交换图片

    案例:图片框与图像框比较

    七、单选按钮与复选框

    1、单选按钮与复选框常用属性

    单选按钮案例演示:

    复选框案例演示:

    八、列表框与组合框

    (一)列表框

    1、列表框概述

    2、列表框常用属性

    (二)组合框

    1、组合框概述

    2、组合框三种样式

    (三)列表框与组合框常用事件

    列表框案例:选择水果

    九、滚动条

    1、滚动条常用属性

    2、滚动条常用事件

    ​十、计时器

    1、计时器属性

    2、计时器事件

    案例:滚动字幕

    十一、框架

    1、框架概述

    2、框架常用属性

    十二、形状控件

    1、Shape概述

    2、常用属性

    案例:展示六种基本形状以及交替显示两种图形

    十三、焦点与Tab顺序

    1、焦点

    2、Tab顺序

    十四、综合案例:个人信息注册


    一、窗体设计

    窗体是VB中最基本的对象,是应用程序的基本组成部分,是菜单栏、工具栏和控件等对象的容器,是应用程序与用户交互的窗口或对话框。窗体设计是整个VB应用程序设计的基础。一个窗体对应一个代码模块。

    1、窗体设计分类

    (1)单窗体设计

    应用程序中只包含一个窗体,即单文档窗体。

    (2)多重窗体设计

    应用程序中包含多个窗体,即多个单文档窗体。

    (3)多文档窗体(MDI)设计

    一种特殊的多窗体界面,应用程序中包含一个父窗体和多个子窗体。

    2、窗体常用属性

    (1)Name(名称)

    窗体名称,默认值为Form1、Form2、……。只能在设计阶段通过属性窗口改变,运行时不能更改。

    (2)Caption(标题)

    在窗体的标题栏中显示的标题,默认值为Form1、Form2、……。


    • 窗体的属性决定窗体的外观和操作。可以通过属性窗口、程序代码、鼠标拖动来设置窗体属性。
    • 名称(Name)属性与Caption属性有本质区别。Caption属性的值显示在标题栏中,而名称(Name)属性是一个标识,用于区别其他对象,在代码中标识对象。
    • 在设计状态下,窗体和控件的Name属性值可以由编程人员设置,这就是对窗体或控件的命名,命名必需使用合法的用户标识符。

    (3)MinButton

    最小化按钮,取值为True/False, 默认值为True,表示显示最小化按钮。

    (4)MaxButton

    最大化按钮,取值为True/False,默认值为True,表示显示最大化按钮。

    (5)ControlButton

    确定是否显示三个控制按钮(最大化、最小化、关闭按钮),默认值为True。如果设置为False,不显示三个控制按钮。

    如果将MinButton属性设置为False,则窗体的最小化按钮显示为灰色。

    如果将MinButton属性和MaxButton属性均设置为False,则最小化按钮和最大化按钮均不会显示,只显示关闭按钮。

    (7)ForeColor

    设置窗体上显示文本的颜色。

    (8)Font

    设置窗体上显示文本的字体。

    (9)Enabled

    设置窗体运行时能否被用户操作。默认值为True,能被用户操作;如果设置为False,则不能被用户操作。在运行时才能看到效果。

    (10)Visible

    设置窗体运行时是否可见。默认值为True,窗体可见;如果设置为False,窗体不显示,此时不能被用户操作。在运行时才能看到效果。

    (11)BorderStyle

    确定窗体边框的类型,取值范围为0到5。

    (12)Picture

    设置窗体背景的图像,默认值为空,表示没有背景图像。

    (13)Left、Top

    设置或返回窗体的左边框距屏幕左边的距离、顶部距屏幕顶部的距离。

    (14)Height、Width

    设置或返回窗体的高度和宽度。

    (15)WindowState

    窗体开始运行时的初始显示状态,0表示正常状态(默认值),1表示最小化,2表示最大化。

    (16)StartUpPosition

    用于设置窗体启动位置

    (17)Count属性

    窗体里控件个数

        


    设置窗体背景图片的两种方法


    (1)直接在属性窗口中,选择Picture属性,通过选择文件或“粘贴”剪贴板中的图形,进行设置。

    (2)在程序中用函数LoadPicture将图像调入作为背景,其格式为:

     [Object.]Picture = LoadPicture("图像文件的完整路径名和文件名")

    如果Object(对象)为当前窗体,则可省略为:

    Picture = LoadPicture("图像文件的完整路径名和文件名")

    3、窗体常用事件

    (1)Initialize

    初始化所有的数据。

    (2)Load

    发生在Initialize之后。装载窗体,但此时窗体不是活动的。

    (3)Activate

    发生在Load之后。激活窗体,等待其他事件发生,此时才能响应用户在界面上的交互操作。

    (4)Click

    在Activate之后,单击窗体,触发Click事件。

    (5)DbClick

    在Activate之后,双击窗体,触发DbClick事件。

    (6)Resize

    在Activate之后,如果进行了改变窗体大小的操作,才会触发Resize事件。

    (7)Unload

    关闭窗口时才发生。把窗体从内存中删除(即卸载窗体)。

    任务1、每单击窗体一次,让窗体缩小1/3。

    单击一次窗体:


    任务2、设置窗体背景图片(静态方式、动态方式)

    (1)静态方式

    (2)动态方式

    问题:如何通过代码取消设置的背景图片呢?

    运行程序,单击窗体加载背景图片:

    单击【清除窗体背景图片】按钮:


    4、窗体常用方法

    (1)Cls

    清除运行时输出的文本和图形。

    格式:[Object.]Cls

    (2)Show

    显示窗体。

    格式: <Object.> Show

    (3)Hide

    隐藏窗体。

    格式: <Object. > Hide

    (4)Move

    移动窗体或控件。

    格式: [Object.] Move Left,Top,Width,Height


    案例:测试窗体常用方法


    通过Move方法固然可以改变窗体在屏幕上的位置,其实通过修改窗体的Top和Left属性也可以移动窗体。

    以后我们结合定时器Timer,定时修改控件的位置,可以产生动画效果。

    Left属性——相当于横坐标;Top属性——相当于纵坐标

    此时,可以通过四个按钮将窗体移到屏幕的任何位置。

    5、多重窗体程序如何设置启动对象(窗体或Sub_Main过程)

    将启动对象改为Form2:

    启动程序,看看是不是Form2出现在屏幕上。

    下面我们把Sub Main作为启动对象,要求用户输入姓名,如果姓名是“admin”,则显示窗体Form1,否则显示窗体Form2。

    启动程序,首先弹出输入框,要求用户输入姓名:

    输入“admin”,看看那个窗体出现在屏幕上:

    单击【确定】按钮,你会发现窗体Form1出现在屏幕上:

    关闭程序,重新启动,这次输入其它姓名来试一试。

    6、加载窗体与卸载窗体

    运行程序:

    单击【加载窗体2】按钮,屏幕上没有动静。

    单击【显示窗体2】按钮,显示出第二个窗体:

    单击【卸载窗体2】按钮,第二个窗体消失:

    二、控件概述

    1、控件概念

    控件是在图形用户界面(GUI)上输入信息、输出信息、启动事件过程等交互操作的图形对象,是进行可视化程序设计的基础和重要工具。

    2、VB控件分类

    (1)标准控件

    (2)ActiveX控件

    (3)可插入对象控件 

    三、标签控件

    1、标签概述

    标签控件(Label)主要用于显示文本信息及程序运行的某些结果等。
    默认控件名为 Label1、Label2、…。

    2、标签常用属性

    (1)Caption

    用于在标签中显示文本。其值为字符型,是默认属性

    (2)Alignment

    文本的对齐方式。

    •     0-左对齐(默认值)
    •     1-右对齐
    •     2-居中

    (3)BackStyle

    设置标签背景是否透明。

    •     0-透明(默认值)
    •     1-表不透明

    (4)BorderStyle

    设置有无边框。

    •     0-无边框(默认值)
    •     1-表有边框

    (5)Autosize

    决定是否能自动改变控件大小以显示全部内容。

    • True-自动调节
    • False-不自动调节(默认值)。

    (6)Wordwrap

    决定是否能扩大控件以显示标题文字。
     当Autosize和Wordwrap均为True时,显示在要标签中的文本就能实现自动换行。

    默认属性是在程序代码中,可以省略的属性,即可用控件名称(Name)代替该属性。

    运行程序:

    单击窗体:

    标签控件示例


    先设置了字折行,再设置自动调整大小:

    四、文本框

    1、文本框概述

    文本框(TextBox)主要用于在窗体中显示和接收文本信息。
    在程序运行期间,用户可用鼠标、键盘在文本框中进行文字编辑。
    文本框的默认控件名为Text1、Text2…。

    2、文本框常用属性

    (1)Text

    文本框中显示的文本内容。其值为字符型,是默认属性。

    (2)PassWordChar

    口令字符,设置文本框内容显示形式(仅对单行文本有效) 。 
         设置为空,表示正常显示形式(默认值)
         设置一个字符,比如“*”,表示显示内容均为该字符

    (3)MultiLine

    决定是否能接收和显示多行文本。
         设置为True,表示可接收和显示多行文本

    (4)MaxLength

    文本框中可接收和显示字符的最大长度。
         设置为0,表示字符数无限制

    (5)ScrollBars

    确定文本框是否具有滚动条,只有当MultiLine True时,该属性才有效。
          设置为0,表示无滚动条
          设置为1,表示有水平滚动条
          设置为2,表示有垂直滚动条
          设置为3,表示有水平和垂直两种滚动条

    (6)Locked

    设置是否锁定文本框中的内容。
          设置为True,表示不能改编辑文本框内容

    设置为False,表示可以编辑文本框内容

    (7)SelText、SelLength

    设置选定文本的内容和长度。
         若未选定任何文本,则SelLength的值为0
    (8)SelStart

    设置在文本框中插入点的位置
         设置为0,表示插入点在最左边(默认值)

    3、文本框常用事件

    文本框除了能响应事件Click、DblClick外,还可响应其他事件。
    (1)Change:当Text属性发生变化时,触发该事件。
    (2)GetFocus:当对象获得焦点时,触发该事件。
    (3)LostFocus:当对象失去焦点时,触发该事件。
    (4)KeyPress:在拥有焦点时,按下键盘键并释放则触发该事件。

    4、焦点

    一个窗体上可以添加多个控件,但最多只允许一个控件能够接受键盘输入。这个能处理键盘事件的控件称为“拥有焦点”。原先不拥有焦点的对象,现在能够接受键盘输入了,称为“获得焦点”,同时触发GotFocus事件;反之,则称为“失去焦点”,同时触发LostFocus事件。例如:在用户界面上,若某个文本框中有表示插入点的竖线在闪动,则表示该文本框拥有焦点。

    5、获得焦点的方法

    (1)用鼠标单击窗体上的某个控件,可以使它获得焦点。
    (2)利用键盘上的Tab键,可以使焦点在不同对象之间按TabIndex 属性指定的顺序依次转移。但是,如果某个对象的TabStop属性设置为False,利用Tab键转移焦点时将跳过该对象。

    注意:许多控件是可以拥有焦点的,但Label、Frame、Timer、Image等控件不能拥有焦点。

    (3)要将焦点移到指定的对象上,可使用SetFocus方法。
      SetFocus方法适用于大部分可见控件,其代码格式:<Object.> SetFocus
    例如:将焦点移到文本框Text1上,使用代码为:Text1.SetFocus

    案例1、计算圆周长、圆面积与球体积

    要求计算结果保留二位小数,第三位四舍五入。

    案例2、演示文本框中选定文本

    五、按钮

    1、按钮概述

    命令按钮(CommandButton)是以按钮的形式出现在窗体上。命令按钮是用户以交互方式执行选择操作的主要控件之一,应用十分广泛。在程序运行期间,用鼠标单击命令按钮,会触发该命令按钮的Click事件,进而执行Click事件过程中的代码。命令按钮的默认控件名为以 Command1、Command2、…。

    2、按钮常用属性

    (1)Caption:标题显示的文本内容。其值为字符型,默认属性。

    命令按钮设置快捷键:&+字母
    例如:命令按钮的Caption属性被设置为“清除(&C)”,则命令按钮表面显示为“清除C”。
    当用户按下Alt + C时,相当于选择该按钮。

    (2)Enabled:决定一个对象能否响应用户操作产生的事件。
       设置为True,响应键盘及鼠标事件(默认值)
       设置为False,表面呈灰色,禁止响应键盘及鼠标事件
    (3)Style:设置控件的外观是标准的文本样式,还是图形样式。
       0 - 文本样式(默认值)

       1 - 图形样式,文本和图形均可显示 

    (4)Picture:设置命令按钮表面显示的图形。

        当Style为1时,该属性才起作用
    (5)DownPicture: 当按下鼠标键时,命令按钮表面显示的图形。
        当Style为1时,该属性才起作用。
    (6)DisabledPicture:当命令按钮暂不起作用时,命令按钮显示的图形。

        当Style为1,并且Enabled为False时,该属性才起作用。

    3、按钮常用事件

    命令按钮控件的最主要、最常用的事件是Click事件。当鼠标单击命令按钮时,就会触发Click事件,转而执行Click事件中的程序。


    案例:用户登录(标签、文本框和按钮)


    输入错误的用户名:

    输入正确的用户名,输入错误的密码:

    六、图片框与图像框

    图片框(PictureBox)和图像框(Image)都具有显示图形图像的功能,可以加载到这两个控件上的图形文件有:   位图文件(.bmp)、图标文件(.ico)、JPEG文件、GIF文件。

    1、图片框属性

    (1)Picture:设置在控件内显示的图像,默认属性
    (2)AutoSize:决定图片框控件是否自动调整以适应图片的大小(图片不变)。
      设置为True,则调整自身大小适应图片
      设置为False,则载入图片从图片框的左上角开始显示

    2、图像框属性

    (1)Picture:设置在控件内显示的图像,默认属性
    (2)Stretch:决定图片是否自动调整以适应图像控件的大小(可能会导致图片变形)。
      设置为True,则会自动调整图片的大小将就图像框
      设置为False,则自动调整图像框大小显示完整图片
      利用Stretch属性可以实现图片的放大与缩小。

    3、图像框与图片框的区别

    (1)图片框控件可以作为其他控件的容器,图像框则不可以。
    (2)图片框可以使用Print方法和绘画语句,而图像框则不可以。
    (3)图像框比图片框占用的内存少,显示速度快。
    (4)图像框具有Stretch属性,若设置为True,是保持自身尺寸不变,通过挤压或拉伸载入的图片,使图片装满图像框。图片框具有AutoSize属性,若设置为True,则是通过改变自身的尺寸来适应载入的图片。

    4、图片框和图像框的事件和方法

    图片框可以响应Click、DblClick、Change等事件。图片框的方法与窗体几乎相同:Print、Cls、TextHeight、TextWidth、PSet、Line、Circle。在图片框中调用这些方法时,不能省略对象名,否则会被误认为是在窗体上调用这些方法。

    用Cls方法可以清除Print、PSet、Line、Circle等方法在图片框中输出的文字和图形信息,不能清除Picture属性中的图形,在图片框中加载的图片只能用不带参数的LoadPicture函数清除。
    图像框(Image)虽然也有各种事件,但实际应用中很少涉及到,一般不要求为之编写事件过程代码。

    案例:交换图片

    运行程序:

    单击【加载图片】按钮:

    单击【交换图片】按钮:

    案例:图片框与图像框比较

    图片文件放在工程所在目录:

    编写窗体加载事件过程,设置图片框与图像框的属性,给两个图片框与两个图像框加载图片:

    运行程序,观察效果:

    七、单选按钮与复选框

    复选框(CheckBox)和单选按钮(OptionButton) 是应用程序的用户界面上常用的两类控件。这两类控件单个使用通常是没有意义的,实际应用中总是成组出现。

    复选框:用于从一组选项中选择所需的多个选项。复选框的默认控件名为Check1、Check2…

    单选按钮:只能在一组选项中选择其中的一项。单选按钮的默认控件名为Option1、Option2…

    1、单选按钮与复选框常用属性

    (1)Value:设置或返回选择的状态。复选框和单选按钮的默认属性均为Value。

    (2)Caption:在控件表面显示的文本内容。用法与命令按钮类似。
    (3)Enabled:决定对象的有效性。能否响应用户操作产生的事件。
       True - 控件起作用(默认值)
       False - 在控件的表面显示的文本为灰色(或暗淡字体),此时控件暂不起作用。
    (4)Style设置控件的外观是标准的文本样式,还是图形样式。 用法与命令按钮类似。


    0 - 标准风格 

    1 - 图形风格 控件的Picture、DownPicture和DisabledPicture 属性有效,这样就能像命令按钮一样,用图形代表不同的状态。

    2、单选按钮与复选框常用事件

    单选按钮和复选框的最常用事件是Click事件。

    单选按钮案例演示:

    复选框案例演示:

    八、列表框与组合框

    (一)列表框

    1、列表框概述

    列表框以列表形式显示多个数据项,供用户选择,实现交互操作。
    如果列表中的数据项较多,超过设计时给定的长度,不能一次全部显示,就会自动添加滚动条。
    但是,用户只能从列表中选择所需的数据项,而不能直接修改其中的内容。

    2、列表框常用属性

    (1)Text:存放被选定选项的文本内容。可在程序中引用该属性以获得当前选定的数据项的内容。该属性是只读的,只能在程序运行期间引用。
    (2)
    List:是一个字符串数组,用来存放列表框中的数据选项。List数组下标编号从0开始。
      List (0) 存放第1个数,List (1) 存放第2个数,依此类推……
      List属性可以在设计阶段通过属性窗口设置,也可以在程序运行期间添加、删除或引用。其访问格式为:
      <object>.List(下标) 

    (3)ListCount:表示列表框的选项总数,只能在程序运行期间设置或引用,设计阶段无效。
    (4)
    ListIndex:表示程序运行期间被选定的选项的序号。由于序号是从0开始编起的,因此最后一个选项的序号为ListCount-1,只能在程序运行期间设置或引用,设计阶段无效ListIndex为-1时,表明用户没有选择列表项。
    (5)Sorted:决定程序运行期间列表框的选项是否按字母顺序排列。如果Sorted属性为True,则选项按字母顺序排列显示;如果为False,则按选项加入的先后顺序排列,只能在设计阶段设置。

    (6)MultiSelect 决定用户是否可以在一个控件中做多重选择。0表示不允许;1表示简单复选(用空格或鼠标选取;2表示扩展复选(可用shift+Ctrl等组合键)。该属性必须在设计阶段设置,运行时只能读取该属性。
    (7)
    Selected 是一个逻辑型数组,表示对应的选项在程序运行期间是否被选中。当数组元素的值为True时,表明选择了List属性的对应项;若为False,则表示对应项未被选择。可向Selected属性的某个元素赋值,也可以指定或取消选择。访问格式为:<object>.Selected(下标) = True | False

    (二)组合框

    1、组合框概述

    组合框是一种兼具文本框和列表框特性的控件,是由一个文本框和一个列表框组合而成的,允许用户通过键入文本或选择列表两种方法来进行选择。

    2、组合框三种样式

    组合框常用的属性、方法与列表框类似,组合框有三种不同的样式,由Style属性值决定,组合框的三种样式。 
    Style属性:0 - 下拉组合框、1 - 简单组合框、2 - 下拉列表框

    (三)列表框与组合框常用事件

    列表框能够响应Click和DblClick事件。所有类型的组合框都能响应Click事件,但只有简单组合框(Style属性为1)才能接受DblClick事件。通常情况下,列表框和组合框的主要作用是通过它们的Text属性为应用程序的其它部分提供被选择的信息,程序员一般不需要为列表框和组合框编写事件过程代码。

    列表框案例:选择水果

    1、创建工程,更名为“列表框演示——选择水果”

    2、添加三个按钮

    (1)第一个按钮名称设置为“cmdSelect”,标题设置为“选择(&S)”

    (2)第二个按钮名称设置为“cmdReset”,标题设置为“复位(&R)”

    (3)第三个按钮名称设置为“cmdExit”,标题设置为“退出(&X)”

    3、添加一个列表框

    (1)列表框名称属性设置为“lstFruit”

    (2)列表框MultiSelect属性设置为1——Simple

    (3)列表框Style属性设置为1——Checkbox

    4、添加一个显示用户选择结果的文本框

    (1)文本框名称设置为“txtResult”

    (2)文本框Text属性设置为空

    (3)文本框MultiLine属性设置为True

    (4)文本框ScrollBars属性设置为2——Vertical

    (5)文本框Locked属性设置为True——用户不能编辑

    5、在窗体加载事件里给列表框添加列表项

    6、编写【选择】按钮单击事件处理代码

    7、编写【复位】按钮单击事件处理代码

    8、编写【退出】按钮单击事件处理

    9、运行程序,测试效果

    组合框案例:

    九、滚动条

    滚动条(ScrollBar)在Windows的工作环境中,经常可以见到。
    滚动条的组成:滚动条两端的滚动箭头、滚动条上的滚动块。
    Visual Basic在工具箱中提供:水平滚动条(HScrollBar)、垂直滚动条(VScrollBar)。
    二者只是表现形式不同,其实功能是完全一样的,用户可以根据界面设计的需要选择适当样式的滚动条。

    1、滚动条常用属性

    (1)Value:滚动条中滚动块当前位置的整数值。
    当用户拖动滚动块,或单击滚动条两端的滚动箭头时,Value属性值随之改变。
    在程序中改变Value属性赋值,可改变滚动块的位置。

    (2)Max、Min:设置滚动条所能表示的最大范围(极限取值范围为-32768 ~ +32767)。
    当滚动块位于水平滚动条最右端或垂直滚动条最下端时,Value属性的值即为Max属性的值。
    当滚动块位于水平滚动条最左端或垂直滚动条最上端时,Value属性的值即为Min属性的值。

    (3)LargeChange、SmallChange:设置滚动块滚动时Value属性的增量,默认值均为1。
    LargeChange用来设置当鼠标单击滚动箭头与滚动块之间区域时Value属性的增量。
    SmallChange属性用来设置鼠标单击滚动箭头时Value属性的增量。

    2、滚动条常用事件

    (1)Change:当滚动条中的滚动块被用户改变后,会触发此事件。
        改变滚动块的方法:  拖动滚动块、单击滚动箭头、通过代码对Value属性赋值
    (2)Scroll:当用户在滚动条内拖动滚动块时,会触发此事件。

     


    十、计时器

    计时器(Timer)不仅可以准确地控制Timer事件发生间隔,也可用于显示系统时间。计时器在运行时总是不可见的,所以在设计阶段可放置在窗体的任意位置上,同时,计时器无Visible属性。

    1、计时器属性

    (1)Enabled:决定计时器是否有效。为默认属性。
      设置为True时,计时器控件可触发其Timer事件。 
      设置为False时,计时器控件不会触发其Timer事件。 
    (2)Interval:决定计时器触发其Timer事件的时间间隔。
      时间间隔的单位为毫秒(ms)。
      不为0,则表示触发其Timer事件的时间间隔为多少ms。
      若为0,则表示计时器不起作用,此时与Enabled 为False时的效果一样,不会触发Timer事件。

    2、计时器事件

    计时器控件只在一个Timer事件, 每经过一个由Interval属性指定的时间间隔就自动触发一次Timer事件。

    案例:滚动字幕

    1、创建工程,更名为“滚动字幕”,设置窗体名称与标题

    2、添加一个标签

    (1)标签名称设置为“lblMessage

    (2)标签标题设置为“二级VB培训开始咯!”

    (3)标签AutoSize属性设置为True

    (4)标签Font设置成隶书、小二号

    3、添加两个按钮

    (1)第一个按钮名称设置为“cmdStart”,标题设置为“启动(&S)”

    (2)第二个按钮名称设置为“cmdStop”,标题设置为“停止(&T)”

    4、添加定时器

     

    (1)定时器的Enabled属性设置为False

    (2)定时器的Interval属性设置为100(单位是毫秒)

    5、编写两个按钮单击事件处理代码

    6、编写定时器代码

    7、运行程序,测试效果

    十一、框架

    1、框架概述

    框架(Frame)用于窗体上的对象分组。可把不同的对象放在一个框架中,使其在视觉上进行区分,总体上被激活或被屏蔽。框架实际上是一个容器。所谓容器,就是可以在其上放置其它控件对象的一种对象。容器内的所有控件成为一个组合,随容器一起移动、显示、隐藏等,若将框框架的Visiable属性设置为False,则框架及在它内部的所有控件在程序运行时均不可见。在已介绍的控件对象中,窗体就是一种容器,另外,图片框也是一种容器。通常用框架将每一组单选按钮框起来,使得同一框架内的单选按钮成为一组,每一组单选按钮的操作均不会影响到其它组的单选按钮的选择。

    2、框架常用属性

    (1)Caption:显示位于框架左上角的标题,用于表明框架的作用。
    (2)Enabled:决定框架中的对象是否可用。
      True - 框架及框架中的所有控件在程序运行时均处于可用状态(默认值)
      False - 框架及框架中的所有控件在程序运行时均处于不可用状态

    十二、形状控件

    1、Shape概述

    利用Shape控件可以绘制基本几何图形:矩形、正方形、椭圆、圆、圆角矩形和圆角正方形。

    2、常用属性

    (1)Shape属性

    Shape属性有6个值,为0~5,分别表示矩形、正方形、椭圆形、圆形、圆角矩形和圆角正方形六种形状。默认形状为矩形,值为0。

    (2)BackStyle属性

    0 - Transparent 透明

    1 - Opaque 不透明

    (3)FillStyle属性

    比如FillStyle设置为6,效果如下:

    案例:展示六种基本形状以及交替显示两种图形

    (1)创建工程,更名为“形状控件演示”

    添加一个框架,在框架里添加六个Shape控件,都改名为MyShape,构成控件数组。

    将六个形状控件的Shape属性依次设置为0、1、2、3、4、5。

    在窗体里添加一个形状控件Shape1和一个定时器控件Timer1。

    (2)编写事件处理代码

    (3)运行程序,查看效果

    大家可以看到,交替显示正方形和圆,每秒钟交替一次。

    十三、焦点与Tab顺序

    1、焦点

    一个窗体上可以添加多个控件,但最多只允许一个控件能够接受键盘输入。这个能处理键盘事件的控件称为“拥有焦点”。原先不拥有焦点的对象,现在能够接受键盘输入了,称为“获得焦点”,同时触发GotFocus事件;反之,则称为“失去焦点”,同时触发LostFocus事件。例如:在用户界面上,若某个文本框中有表示插入点的竖线在闪动,则表示该文本框拥有焦点。

    要将焦点移到指定的对象上,可使用SetFocus方法。
    SetFocus方法适用于大部分可见控件,其代码格式:<Object.> SetFocus
    例如:将焦点移到文本框Text1上,使用代码为:Text1.SetFocus

    2、Tab顺序

    利用键盘上的Tab键,可以使焦点在不同对象之间按TabIndex 属性指定的顺序依次转移。但是,如果某个对象的TabStop属性设置为False,利用Tab键转移焦点时将跳过该对象。

    十四、综合案例:个人信息注册

    1、创建工程,修改名称为“个人信息注册”,窗体名称设置为“frmRegistration”,StartUpPosition设置2

    2、添加两个框架Frame1和Frame2

    Frame1的Caption设置为“注册个人信息”,Frame2的Caption设置为空。

    3、在Frame2里添加三个按钮

    (1)修改三个按钮名称

    cmdRegistrate、cmdReset、cmdExit

    (2)修改三个按钮标题

    (3)将注册按钮设置为默认按钮

    4、在框架Frame1里添加一个标签和一个文本框

    (1)标签的标题设置为“用户名:”

    (2)文本框的名称设置为txtUsername,Text属性设置为空,TabIndex设置为0

    5、编写注册按钮cmdRegistrate的单击事件处理代码

    6、运行程序,测试一下效果

    输入一个用户名:张三丰,然后单击【注册】按钮:

    7、添加一个标签和两个单选按钮

    (1)标签的Caption设置为“性别”

    (2)第一个单选按钮名称设置为optMale,Caption设置为“男”,Value属性设置为True

    (3)第二个单选按钮名称设置为optFemale,Caption设置为“女”

    8、修改【注册】按钮单击事件处理代码

    9、运行程序,测试效果

    输入姓名“陈玉莲”,性别设置为“女”:

    10、在框架Frame1里添加一个标签和三个复选框

    (1)标签的AutoSize设置为True,标题设置为“爱好”

    (2)第一个复选框名称设置为“chkBook”,标题设置为“阅读”

    (3)第二个复选框名称设置为“chkTravel”,标题设置为“旅行”

    (4)第三个复选框名称设置为“chkMusic”,标题设置为“音乐”

    11、修改【注册】按钮单击事件处理代码

    12、运行程序,测试效果

    13、在框架Frame1里添加一个标签和一个列表框

    (1)标签的标题设置为“城市”

    (2)列表框的名称设置为“lstCity”

    (3)列表框的list属性设置为“北京,上海,广州,深圳,泸州”

    14、在窗体加载事件Form_Load()里给城市列表控件再添加三个列表项

    15、运行程序,看看城市列表框里是否有8个城市

    16、修改【注册】按钮单击事件处理代码

    对于单选列表框,没有必要通过上述循环嵌套选择的方式来获取用户选择的列表项,只需ListIndex属性即可,但是对于多选列表框,就需要上述方式才能获取用户选择的多个列表项,可以参看前面的列表框案例:选择水果。注意:ListIndex是从0开始的,比如用户选择了列表框的第1项,那么ListIndex为0,用户选择了列表框的第4项,那么ListIndex为3。即ListIndex = 选中的列表项的序号 - 1。0 <= ListIndex <= ListCount - 1。

    代码简化如下:

    17、运行程序,看看效果

    18、在框架Frame1里添加一个标签和一个组合框

    (1)标签的标题设置为“职业”

    (2)组合框的名称设置为“cboCareer”

    (3)设置组合框的List属性,添加4项内容:医生、教师、律师和公务员

    (4)组合框的Text属性设置为“医生”

    (5)组合框的Style属性设置为2——Dropdown List(下拉列表框),只能选择,不能输入

    19、在窗体加载事件里给组合框再添加3项内容

    20、修改【注册】按钮单击事件处理代码

    21、运行程序,测试效果

    22、 编写【重置】按钮单击事件处理代码

    23、编写【退出】按钮单击事件处理代码

    展开全文
  • VB.NET制作特效窗体

    千次阅读 2012-07-13 14:10:52
    新一代的开发工具Visual Basic.Net为设计制作窗体提供了更简单而丰富的方法,无需再求助于复杂而易错的API函数,我们就可以轻松制作多种特效窗体: 1 、轻松制作透明窗体 VB.NET可以轻松制作出任一透明度的窗体...
  • 在一个程序项目中我们有时需要有多个窗体,可是又不想在设计时添加,而要在运行时添加。这时我们可以使用Object类型的数组,来...[运行时加载多窗体1](https://img-blog.csdn.net/20180730131340593?watermark/2/t...
  • 课程名称:可视化程序设计(VB) 一、课程的性质和任务 VISUAL BASIC程序设计是一门理论与实践相结合,偏重于应用的课程。其主要课程内容包括VB程序设计语言概述,VB集成开发环境简介,面向对象程序设计方法简介,VB...
  • VB实用小程序实例源码集,考察的技术要点比较,比如涉及到了窗体界面设计、数据库、字符处理、鼠标特效_动画光标、系统菜单_图形菜单、系统设置_回收站、系统时钟、窗体_切换控制、文件阅读_读取txt等内容,每一个...
  • 由于程序需要,在一个窗体中,读取数据库的记录内容,然后在界面中添加相应的按钮,供用户点击,响应对应的事件。 谷歌一下很,看到: http://developer.51cto.com/art/200910/155672.htm ...
  • 新一代的开发工具Visual Basic.Net为设计制作窗体提供了更简单而丰富的方法,无需再求助于复杂而易错的API函数,我们就可以轻松制作多种特效窗体: 1 、轻松制作透明窗体 VB.NET可以轻松制作出任一透明度...
  • 本书通过大量实例,介绍了如何在Visual Basic程序设计中使用 Win32 API函数,内容包括:API函数的声明和参数传送、资源文件、窗口、Windows消息控制、设备环境(DC)、GDI对象、光标、位图与光栅运算、字体与文本、...
  • 新一代的开发工具Visual Basic.Net为设计制作窗体提供了更简单而丰富的方法,无需再求助于复杂而易错的API函数,我们就可以轻松制作多种特效窗体:1 、轻松制作透明窗体VB.NET可以轻松制作出任一透明度的窗体:...
  • 这几天在设计阅读其中用到了很好的技术,,让我们在设计软件的时候方便,,快捷,,美观.也是我们经常用到的一些控件.所以在这里我会陆续把他分享出来. 这里是在窗体中改变窗体的大小.窗体内部所以控件的大小同比例的...
  • 网摘》窗体设计原则

    2014-02-07 14:36:02
    VB的用户界面设计 界面样式  如果使用过基于 Windows 的应用程序,也许已经注意到不是所有用户界面看上去或操作起来都一样。用户界面样式主要有两种:单文档界面 (SDI) 和文档界面 (MDI)。SDI 界面的一个示例就是...
  • 问题:1。在vb中树型控件的另一层节点下添加子节点2。如何在vb中树型控件子节点上添加程序,实现单击,弹出窗体。3。在vb中如何使窗体最大化时,里面的控件也跟着相应的变化。4。在vb中如何建立视图。
  • VB课程设计俄罗斯方块

    热门讨论 2011-02-25 10:46:55
    1.3程序设计思想 游戏是用来给大家娱乐的,所以要能在使用的过程中给大家带来快乐,消除大家的疲劳,所以我们在游戏中添加了漂亮的场景和动听的音乐,设置了过关升级的功能,激发大家的娱乐激情。 从游戏的基本玩法...
  • 网摘》窗体、子窗体

    千次阅读 2014-01-31 22:49:19
    其实Picture做为MDI窗体最佳容器,在设计MDI程序时,还是被很程序员采用的方法。 1.建立MDI窗体;[工程]\[添加  MDI 窗体]  2.在MDI窗体上方画一个Picture1,因为Picture的Align默认是停靠在顶部的;  3.设置...
  • 可视化信封打印,基于VB代码设计,从窗体的形式来看,设计得更像是一个信封,邮编、地址、收信人姓名等与实物想吻合,其实要做的细节还有很,不过就本例子来说,一个可视化的打印雏形已经建立,因此其它的一些修饰...
  • 本书主要内容包括VB的集成开发环境,可视化的应用程序界面设计,结构化程序设计的基础知识,窗体和标准控件的常用属性、事件和方法,面向对象的程序设计方法及事件驱动的编程机制,多媒体程序设计,数据库程序的开发...
  • 面向对象程序设计的基本概念

    千次阅读 多人点赞 2021-01-31 17:03:44
    1.基本术语 (1) 对象和对象类   对象是代码和数据的...类是面向对象程序设计的核心技术,可以理解成一种定义了对象行为和外观的模板;把对象看作是类的原原本本的复制品,类具有继承性、封装性、态性、抽象性。  
  • VB病毒逆向分析

    2020-06-21 10:51:14
    VB程序只有一个窗体的话则从窗体form的load过程开始执行,如果有窗体则从设计的第一个窗体的Form_Load过程开始执行,因为没有main过程,所以判断Form_Load就是VB应用程序的入口点了。 Native编译的VB病毒程序...
  • VB习题答案(1-4) 习题1 一选择题 以下叙述中错误的是 一个Visual Basic 应用程序可以含有个标准模块文件 个visual Basic 工程可以含有窗体文件 (C标准模块文件可以属于某个指定的窗体文件 (D标准模块文件的...

空空如也

空空如也

1 2 3 4 5 6
收藏数 115
精华内容 46
关键字:

vb多窗体程序设计