VB的界面设计

11 篇文章 0 订阅

第二章 VB的界面设计

 

第二章  VB 的界面设计
2.1  VB 用户界面设计基础
1. 概述

        界面的设计有两步:先绘制控件,然后确定控件属性。
        绘制控件:在工具箱里单击想画的控件,在窗体里按下鼠标并拖曳,然后松开鼠标即可。确定属性:先选中控件,然后按 F4 键或单击工具栏上的属性窗口进入属性(Properties)窗口,再在属性窗口中找到要设置的属性并进行设置。
2. 常用属性的设置
(1) Name 属性

        对象都有名字,计算机把名字看成对象于对象之间的根本差异,因此在同一窗体里不许出现重名的情况(除非这是一个控件数组),且名字不得超过 40 个字。
        在简单的程序里,给控件命名不是很必要,完全可以使用控件 Name 属性的缺省值。例如 Text1 。但在有几十个控件的复杂窗体里,就很难区分它们。所以, VB 推荐由三个小写字母的前缀和一个第一个字母为大写的描述性单词组成的名字。例如 cmdMyButton 是一个命令按钮(前缀是 cmd)
推荐的前缀

对象前缀例子
确认框(Check Box)chkchkCareerChioce 
组合框(Combo Box)cbocboCrimesCommitted 
命令钮(Command Button)cmdcmdExit 
数据库控件(Data Control) datdatTopSecretInfo 
目录列表框(Directory List Box)dirdirTree 
驱动器列表框(Drive List Box)drvdrvHardDisk 
文件列表框(File List Box) filfilDocuments 
窗体(Form) frmfrm1040Tax 
框架(Frame)frafraGroupButtons 
水平滚动条(Horizontal Scroll Bar)hsbhsbTemperature 
图形(Image)imgimgPrettyDrawing 
标签(Label)lbllblFakeName 
线(Line) linlinBorder 
列表框(List Box) lstlstCandidates 
菜单(Menu)mnumnuHamAndEggs 
选项钮(Option Button) optoptStation101 
图形框(Picture Box) picpicPrettyPicture 
几何图形(Shape) shpshpUpOrShipOut 
文本框(Text Box) txttxtWarning 
垂直滚动条(Vertical Scroll Bar) vsbvsbMoneyRaised

(2) Caption 属性
      Caption 即标题,是可以在对象外观上直接看见的文本,可以长达 255 字符,包括空格和标点符号,比如一个叫 cmdOk 的命令钮,它的 Caption 属性就可以是� Ok�。 注意:并不是所有的对象都有此属性,比如文本框、图片框、线条等就没有。
      为按钮设置热键 :在设置 Caption 属性时,在需要加下划线的字母前加上 �&� 符号,例如 �&File�,输出的就是� F ile�,这样就可以通过按 ALT 键和标题上那个带下划线的字母来选取它了 , 不必为此编任何代码。
Name 和 caption 的比较
  1) Name 是系统用来识别对象的,编程时需要用它来指代各对象; Caption 是给用户看的,提示用户该对象的作用;
  2) Name 可以采用系统默认的名称,但 Caption 应该根据实际情况改成意义明了的名词;
  3)所有对象都有 Name ,但不一定都有 Caption ;
(3)Top , Left 属性
        这两个属性决定对象的位置。只有两种情况需要在属性窗口里设置这两个属性:第一种是用户没有鼠标,第二种是程序员需要十分精确地设定这两个值。当选中对象,单击并拖曳它的时候,便在修改这两个值了。
(4) Height , Width 属性
        这两个属性决定了对象的大小,当选中控件时,它周围出现八个小黑方块,把鼠标指向这些方块,鼠标指针将变成一个双向的箭头,这时按下鼠标并拖曳它,即可改变控件的大小,也就改变了 Height , Width 属性。

 
2.2  创建窗体

1.   窗体的属性
(1)   常用属性简介

属性名称说明
Name窗体名称系统识别窗体的标识名,一个窗体名必须以一个字母开头,可包含数字和下划线,但不能包含空格和标点符号。
Caption窗体标题出现在窗体标题栏中的文本内容
Icon窗体图标这个属性是用户经常要使用的一种属性。当用户的应用程序在工具条上最小化或在Windows桌面上变为一个独立应用程序时,该属性决定将采用何种图标,窗体控制框里的图标也由它决定。
BackColor窗体背景色可以从属性框里弹出调色板,选择所需要的颜色
ForeColor窗体前景色窗体上打印文字的颜色
BorderStyle边框风格这个属性决定了窗体边框的样式,共有6种属性值。改变窗体的BordrStyle属性后,窗体在屏幕上没有变化,它只在运行时才变为所要求的样子。
Apearance外形这个属性用来决定控件是否采用三维效果
ControlBox控件按钮控件按钮用来决定是否采用 控件框的属性,仅在程序运行时才有效。
Font字体用来改变该窗体上显示信息的字体、字型和字号,它控制着直接在窗体上打印的文本显示。
Visible可见性该属性决定窗体是否可见, 默认情况下是可见的。错误地改变其值是很危险的,窗体会从眼前消失,
WindowState窗体状态指定窗体在运行时的三种状态:正常、最小化、最大化。
Enabled活动性默认值为True,决定窗体能否被访问。
Left、Top、Height、Width左边距、顶边距、高度、宽度决定窗体在屏幕上的位置及窗体大小。

(2)设置属性的方法
 1) 在设计态通过属性窗口设置
 
直接在属性窗口中选择或输入既可。
  2) 在程序代码中改变属性值
 
代码中的格式为:  
对象名 . 属性 = 属性值
 
例: Form1.BackColor=RGB (255 , 0 , 0)

2.   窗体的常用方法
(1) Hide 方法

         用以隐藏 MDIForm 或 Form 对象,但不能使其卸载。
 
  语法
object.Hide  
         object  所在处代表一个对象表达式,其值为�应用于�列表中的一个对象。如果省略 object ,则带有焦点的窗体就认为是该 object 。
 说明
  隐藏窗体时,它就从屏幕上被删除,并将其 Visible 属性设置为 False 。 用户将无法访问隐藏窗体上的控件,但是对于运行中的 Visual Basic 应用程序,或对于通过 DDE 与该应用程序通讯的进程及对于 Timer 控件的事件,隐藏窗体的控件仍然是可用的。
     窗体被隐藏时,用户只有等到被隐藏窗体的事件过程的全部代码执行完后才能够与该应用程序交互。
  �如果调用 Hide 方法时窗体还没有加载,那么 Hide 方法将加载该窗体但不显示它。
(2) Move 方法
        用以移动 MDIForm 、 Form 或控件。
  语法
object . Move  left, top, width, height
      
Move 方法的语法包含下列部分: 

部分描述
object 可选的。一个对象表达式,其值为�应用于�列表中的一个对象。如果省略 object ,带有焦点的窗体缺省为 object 。
left 必需的。单精度值,指示 object 左边的水平坐标 (x- 轴 ) 。
top 可选的。单精度值,指示 object 顶边的垂直坐标 (y- 轴 ) 。  
Width可选的。单精度值,指示 object 新的宽度。
height 可选的。单精度值,指示 object 新的高度。

说明: 只有 left 参数是必须的。但是,要指定任何其它的参数,必须先指定出现在语法中该参数前面的全部参数。例如,如果不先指定 left 和 top 参数,则无法指定 width 参数。任何没有指定的尾部的参数则保持不变。
(3) Print 方法
         在 Immediate 窗口中显示文本。
  语法: object . Print [ outputlist]
        
Print 方法的语法具有下列对象限定符和部分:

部分描述
object必需的。对象表达式,其值为�应用于�列表中的对象。
outputlist 可选的。要打印的表达式或表达式的列表。如果省略,则打印一空白行。

  outputlist 参数具有以下语法和部分:
  {Spc(n) | Tab(n)} expression charpos

部分描述
Spc(n) 可选的。用来在输出中插入空白字符,这里, n 为要插入的空白字符数。
Tab(n)可选的。用来将插入点定位在绝对列号上,这里, n 为列号。使用无参数的 Tab(n) 将插入点定位在下一个打印区的起始位置。
expression 可选。要打印的数值表达式或字符串表达式。
Charpos可选。指定下个字符的插入点。使用分号 (;) 直接将插入点定位在上一个被显示的字符之后。使用 Tab(n) 将插入点定位在绝对列号上。使用无参数的 Tab 将插入点定位在下一个打印区的起始位置。如果省略 charpos ,则在下一行打印下一字符。

说明
        �可以用空白或分号来分隔多个表达式。
        �对系统指定的国别设置,用小数点分隔符将所有打印到 Immediate 视窗的数据正确格式化。关键字要用适用于主应用程序的语言输出。
        �对于 Boolean 数据,或者打印 True 或者打印 False 。根据主机应用程序的地区设置来翻译 True 和 False 关键字。   �使用系统能识别的标准短日期格式书写 Date 数据。当日期或时间部件丢失或为零时,只书写已提供的部件。
         � 如果 outputlist 数据是 Empty ,则无内容可写。但是,如果 outputlist 数据是 Null ,则输出 Null 。在输出 Null 关键字时,要把关键字正确翻译出来。
         �要把错误数据作为 Error errorcode 输出。在输出 Error 关键字时,要把关键字正确翻译出来。
         �如果在具有缺省显示空间的模块外使用此方法,则需要 object 。例如,如果没有指定对象就在标准模块上调用此方法,则将导致错误发生,但是,如果在窗体模块上进行调用,则会在窗体上显示� outputlist�。
  注意 : 因为 Print 方法是按照字符比例进行打印,所以字符数与字符所占据的宽度固定的列的数目无关。例如,像 � 这样的宽字母占据的宽度超过一固定列宽,而像 "i" 这样的窄字母占据的宽度则较小。考虑到要使用比平均字符更宽的空间,表列一定要留有足够余地。另外,也可以使用固定间距的字体(像 Courier 字体)来确保每一字符均只占一列。
(4) PrintFrom 方法
  用以将 Form 对象的图象逐位发送给打印机。
  语法: object.PrintForm
  说明
: PrintForm 将打印 Form 对象的全部可见对象和位图。在绘制图形时,如果 AutoRedraw 属性为 True ,则在运行时 PrintForm 将打印 Form 对象或 PictureBox 控件上的图形。
       � PrintForm 所使用的打印机是由操作系统的控制面板中的设置来决定。
(5) Refresh 方法
  强制全部重绘一个窗体或控件。
  语法: object.Refresh
  说明:
在下列情况下使用 Refresh 方法:
        �在另一个窗体被加载时显示一个窗体的全部。
        �更新诸如 FileListBox 控件之类的文件系统列表框的内容。
        � 更新 Data 控件的数据结构。
        Refresh 方法不能用于 MDI 窗体,但能用于 MDI 子窗体。不能在 Menu 或 Timer 控件上使用 Refresh 方法。
        通常,如果没有事件发生,窗体或控件的绘制是自动处理的。但是,有些情况下希望窗体或控件立即更新。例如,如果使用文件列表框、目录列表框或者驱动器列表框显示当前的目录结构状态,当目录结构发生变化时可以使用 Refresh 更新列表。
        可以在 Data 控件上使用 Refresh 方法来打开或重新打开数据库(如果 DatabaseName, ReadOnly, Exclusive 或 Connect 属性的设置值发生改变),并能重建控件的 Recordset 属性内的 dynaset 。
(6) Show 方法
        用以显示 MDIForm 或 Form 对象。
  语法: object.Show style, ownerform
        Show 方法的语法包含下列部分:

部分描述
object 可选的。一个对象表达式,其值为�应用于�列表中的一个对象。如果省略 object ,则与活动窗体模块关联的窗体缺省为 object 。
Style可选的。一个整数,它用以决定窗体是模式还是无模式 。如果 style 为 0 ,则窗体是无模式的;如果 style 为 1 ,则窗体是模式的。
Ownerform可选的。字符串表达式,指出部件所属的窗体被显示。对于标准的 Visual Basic 窗体,使用关键字 Me 。

说明
        �如果调用 Show 方法时指定的窗体没有装载, Visual Basic 将自动装载该窗体。
        �当 Show 在显示无模式窗体时,随后遇到的代码则要执行。当 Show 在显示模式窗体 (modal form) 时,则随后的代码直到该窗体被隐藏或卸载时才能执行。
        �当 Show 在显示模式窗体时,除了模式窗体中的对象之外不能进行输入(键盘或鼠标单击)。对其它窗体进行输入前程序必须隐藏或卸载模式窗体(通常是处于响应用户某些操作状态)。 MDIForm 不能是形式的。
        �在模式窗体显示时,虽然应用程序中的其它窗体失效,但其它应用程序不会失效。
         �应用程序的启动窗体在其 Load 事件调用后会自动出现。
  下面的例子说明如何使用 ownerform 参数:
         Private Sub cmdShowResults_Click()  ' 显示模式窗体 frmResults.   frmResults.Show vbModal, Me  End Sub
(7) Cls 方法
        清除运行时 Form 或 PictureBox 所生成的图形和文本。
   语法: object.Cls
   说明

        � Cls 将清除图形和打印语句在运行时所产生的文本和图形,而设计时在 Form 中使用 Picture 属性设置的背景位图和放置的控件不受 Cls 影响。如果激活 Cls 之前 AutoRedraw 属性设置为 False , 调用时该属性设置为 True ,则放置在 Form 或 PictureBox 中的图形和文本也不受影响。 这就是说,通过对正在处理的对象的 AutoRedraw 属性进行操作,可以保持 Form 或 PictureBox 中的图形和文本。
        �调用 Cls 之后, object 的 CurrentX 和 CurrentY 属性复位为 0 。

3. 窗体的常用事件
  (1)  Load 事件

  这个事件发生在窗体被装入内存时,且发生在窗体出现在屏幕之前。窗体出现之前, Visual Basic 会看一看 Load 事件里有没有代码,如果有,那么它先执行这些代码,再让窗体出现在屏幕上。
  (2) Click 事件, Dblclick 事件
  这两个事件在单击或双击窗体时发生。不过单击窗体里的控件时,窗体的 Click 事件并不会发生, Visual Basic 会去看控件的 Click 事件里有没有代码。
  (3) Activate ( 活动事件 ) 与 Deactivate (非活动事件)
  显示多个窗体时,可以从一个窗体切换到另一个窗体。每次激活一个窗体时,发生 Activate 事件,而前一个窗体发生 Deactivate 事件。
  (4) Resize 事件
  在窗体被改变大小时会触发此事件。
4. 窗体的控制
(1) 装入或卸出窗体

  要装入或卸出窗体,用 Load  或 Unload 语句。
   装入窗体
Load formName
   卸出窗体
UnLoad formName
   FormName 变量是要装入或卸出的窗体名。 Load 语句只是把窗体装入内存,并不显示出来,要显示窗体可以使用窗体的 Show 方法。
(2) 显示或隐藏窗体
   要显示或隐藏窗体,用 Show 或 Hide 方法。若尚未装入内存则先装入再显示。
   显示窗体:   formName.show mode
   隐藏窗体:  formName.hide

   FormName 变量是窗体名 , 可选变元 mode 为 0 (缺省值)时窗体为非模态,为 1 时窗体为模态。模态窗体完全占有应用程序控制权,不允许切换到别的应用程序,除非关闭!而非模态窗体则反之。
  (3) END 语句
   END 语句的功能是终止应用程序的执行,并从内存卸在所有窗体。语法是: END


2.3 控件
1.  常用控件介绍
   (1)标准控件一

TextBox 文本框Timer 计时器HscrollBar 水平滚动条
ListBox 列表框Pointer 指针VScrollBar 垂直滚动条
CheckBox 复选框Label 标签DirListBox 文件夹列表框
PictureBox 图片框Line 线条DriveListBox 驱动器列表框
ComboBox 组合框Shape 图形FileListBox 文件列表框
OptionButton 选项按钮Image 图象Data 数据控件
CommandButton 命令按钮Frame 框架OLE 控件

(2)   常用控件的属性、方法和事件

公共属性Name 、 Caption 、 Enabled 、 Fantsize 、 Height 、
Width 、 Index 、 Left 、 Top 、 TabStop
公共方法Move 、 Refresh 、 Setfocus (设置焦点)
公共事件Click 、 DblClick 、 LostFocus (失去焦点)

 
控件名称属性、方法、事件说明
TextBox  文本框

(用于接受用户在框内输入的内容)

Text 属性即用户从文本框输入的内容
PasswordChar 属性设置口令时用的掩码,如:用 * 代替实际输入的内容
MaxLength 属性最大长度,缺省值是 0 ,即可以输入任意个字符
MultiLine 属性为 True 时可以多行文本,为 False 时只能输入一行文本
Alignment 属性文本在框中的对齐方式: 0= 左对齐, 1= 右对齐, 2= 居中
Chang 事件当框中的文本内容发生变化时触发该事件
LostFocus 事件当光标离开文本框时触发该事件
Label 标签(用于在窗体上添加文字说明)Alignment 属性Caption 文本的对齐方式: 0= 左对齐, 1= 右对齐, 2= 居中
WordWrap 属性为 True 时可根据标签大小自动换行
AutoSize 属性自动调节大小,为 True 时可根据文本大小自动调整标签大小,为 False 时标签大小不能改变,过长的文本被截掉
ListBox 列表框

(用于列出可供用户选择的项目列表)

List 属性用于保存列表内容,访问: [ 对象名 ] . List (列表项序号)列表项的序号由上到下依次为 0 、 1 、 2 、 3 厖
ListCount 属性列表项数目
ListIndex 属性列表项索引,其值为最后选中的列表项序号,第一个为 0 ,如果未选中任何表项,其值为 -1 。
Text 属性列表项正文,其值为最后选中的列表项的文本,它与
List (ListIndex)相同。
Columns 属性列表框显示形式取 0 时为一列显示所有行,其他值为多列。
Sort 属性排序属性,为 True 时,列表项按 ASCII 码排序,为 False 时,则不排序。
AddItem 方法添加列表项,使用格式:
[ 对象名 .] AddItem< 列表项文本 > [ ,插入位置序号 ]
若不指定位置,则插入到列表末尾。
 Clear 方法删除列表所有项目
RemoveItem 方法删除列表项,使用格式:
[ 对象名 .] RemoveItem   删除项序号
PictureBox 图片框

Image  图象(用来把图形放入程序里)
AutoSize/Stretch

属性

调整图片框以适应图象 / 调整图象以适应外框
Picture 属性 决定控件中显示的图象
装入图形 :
   imgMyHand.Picture = LoadPicture ( 揷:\graphics\hand.bmp� )

删除图形
:
  imgMyHand.Picture = LoadPicture ( � � )
ComboBox 组合框(将列表框和文本框结合在一起)Style 属性外观属性:取 0 时,系统创建一个带下拉式列表框的组合框;为 1 时,系统创建一个由文本框和列表框直接组合在一起的简单组合框,可以从列表框中选择,也可以直接在文本框中输入;为 2 时,系统创建一个没有文本框的下拉式列表框,单击列表框上的按钮才显示文本框,用户不能在文本框中输入,只能在列表框中选择。
Text 属性其值为用户从列表框中选定的文本或直接输入的文本。
AddItem 方法添加列表项,使用格式:
[ 对象名 .] AddItem< 列表项文本 > [ ,插入位置序号 ]
若不指定位置,则插入到列表末尾。
Clear 方法删除列表所有项目
RemoveItem 方法删除列表项,使用格式:
[ 对象名 .] RemoveItem   删除项序号
CommandButton

命令按钮

Cancel 属性取消属性,它为 True 时 , 按〖 ESC 〗即等于单击此按钮。
Default 属性缺省属性,它为 True 时 , 按回车键即等于单击此按钮。
Timer 计时器Interval 属性两次调用 Timer 事件的事件间隔,用于创建动态效果。
Frame 框架
CheckBox 复选框OptionButton 选项按钮
Alignment 属性决定它们的对齐方式, 0= 左对齐, 1= 右对齐。
Value 属性决定它们是否被选中的属性

2.  常用控件的使用辨析
(1)文本框和标签的区别:

  文本框通常用于向计算机输入信息,而标签通常用于输出信息。文本框是一个十分重要的控件,因为由复选框和选项按钮向程序输入的信息毕竟只有少数的几条信息而已。标签和文本框的区别很小,标签可以看成是一个在运行时不能修改正文的文本框,因此标签主要用于输出信息。
(2)  Label 的 AutoSize 属性和 WordWrap 属性
  �为了使标签具有垂直伸展和字换行处理,必须设置它的 AutoSize 属性和 WordWrap 属性同时为 True 。
  �AutoSize 属性为 False , WordWrap 属性为 False 时,若标签不够高而 Caption 太长时, Caption 将被切割掉。
  �AutoSize 属性为 False , WordWrap 属性为 True 时,情况也如此。
  �AutoSize 属性为 True , WordWrap 属性为 False 时,表示可以水平伸展,但只显示一行信息。
(3) PictureBox 和 Image 的 Stretch 属性和 AutoSize 属性
  �Image 只有 Stretch 属性,而 PictureBox 只有 AutoSize 属性。
  �AutoSize 属性设为 True ,则 PictureBox 改变自己的大小来适应其中的图形。
  �Stretch 属性设为 True ,则 Image 中的图形将改变自己的大小来适应外面的边框。
(4)Frame 框架、 CheckBox 复选框、 OptionButton 选项按钮的区别:
  �复选框和选项按钮用于向程序输入信息 , 框架用来对复选框和选项按钮进行分组。
    �复选框选中时会在小方框里打一个钩,选项按钮选中时会在小圆圈里点一个点。
3 .控件使用举例
   例 3 、 4

2.4   定制菜单
1.  菜单概述

  Windows 中的菜单一般由菜单条、菜单、菜单项、子菜单、弹出式菜单组成。
2.  普通菜单的设计
(1) 给菜单命名

   菜单标题和菜单命令也有 Caption 和 Name 属性,设置了这两个属性就等于创建了菜单。 Name 是一个抽象名称, Caption 是屏幕上可见的,可在 Caption 里加入 �&� 来设置热键。
(2)   增加和删除菜单
 
 在 Menu Editor 中部有三个命令钮分别是 下一个、插入、删除 插入可用来增加新的菜单。在这三个键下面的 Caption 列表框里选中菜单项(这时它的底色就变成深蓝色),单击 插入键, Visual Basic 将上一个增亮菜单下推并增亮一空行,就可以输入新菜单名和标题了。 删除键可用来删掉菜单。选中要删掉的菜单,单击 Delete 键就可以删掉它了。
(3)   移动菜单标题
 
 有四种情况:向上移动,向下移动,向左缩排,向右缩排,选中某一菜单标题,安上下箭头,则这个菜单将上下移动到你喜欢的位置上,这也决定了它在界面中的位置。如果按左右箭头,情况则有所不同。由于菜单是分级的,所以,如果它没有缩排,则它是一个菜单标题;如果它缩排一次,那么它将变成一个菜单命令;如果缩排两次,那么它将成为一个子菜单命令。 VB 里可以总共设计四层子菜单。
(4)   设置分离条
   分离条是指在菜单中将命令分组的线, VB 将分离条也看成一个菜单项,它也需要 Caption 和 Name 属性,而且也有其它属性,分离条与菜单项的区别是分离条的 Caption 属性必须是连字号即减号。也就是,当设置了一个 Caption 属性为 �-� 的菜单项时,实际上就设置了一个分离条,分离条的名字可以是 barFile1 之类,以表明分离条的位置。
(5) 菜单的各种简单属性
  在菜单编辑器里有许多确认框和一些文本框及一个下拉式的列表框,这些决定了菜单的各种属性。
1) Checked 复选属性
  这个属性值设置为真,将在菜单命令左边产生一个打勾的确认标志。
2) Enabled 有效属性
  各种各样的用户会产生千奇百怪的操作,在许多 Edit 菜单里都会有不同形式的让菜单命令模糊的情况。 Enabled 属性为真,则菜单命令是清晰的, Enabled 属性为假,则菜单命令是模糊的,这时用户就不能选中这个菜单项了。
3) Visible 可见属性
   对暂时不用的菜单, 如果把 Visible 属性设为假,则菜单根本不会出现在屏幕上。这样做比把 Enabled 属性设为假显得更加干脆!
4) Index 属性
  可以生成菜单命令数组,用索引号区分开。例如向 File 菜单中添加一系列最近打开的文件名。添加菜单可用 Load 方法。以上属性可以在运行时设置,形成动态的菜单的情况。
  例如:
   mnuUndo.Enabled = False
   mnuProperty.Visible = False
   还可以改变 Caption 等属性。
  mnuUndo.Caption = 揜edo�
(6)为每个菜单项编写事件过程代码
3. 生成弹出式菜单(或浮动菜单)
 
  几乎每个 Windows 应用程序都提供弹出式菜单,用户可以右键单击窗体或控件取得这个菜单。弹出式菜单也属于普通菜单,只是不固定在窗体上,而是可以在任何地方显示。
   弹出式菜单用 PopupMenu 方法调用。假设已经用菜单编辑器生成了名为 mnuedit 的菜单,则可以在 MouseUp 事件加入如下代码就可以生成弹出式菜单:
  If Button = 2 Then PopupMenu mnuedit
4 .菜单设计示例
  例 5

2.5   设计状态条、工具栏、进程条等
1.   创建状态条

   选中状态条,按 F4 键进入属性窗口,双击(Custom)可以进入主要的设置窗口 SBarCtrl 属性窗口。
(1) 选择面板形状
  在 SBarCtrl 属性窗口里选择 General 标签,在 Style 列表框里选择多面板(缺省形式)或单面板简单文本形式。
(2) 添加或删除状态条面板
   在 SBarCtrl 属性窗口里选择 Panels 标签,单击 Insert 按钮添加一个面板,或单击 Remove 按钮删除一个面板。
(3) 在单面板里显示文本
  在 SBarCtrl 属性窗口里选择 General 标签,在 SimpleText 框里输入想显示在状态条面板里的文本。用代码显示的方式是:
   StatusBar1.SimpleText = "New string to appear"
(4) 在多面板里显示文本或图形

  1). 在 SBarCtrl 属性窗口里选择 Panels 标签,用 Index 旁的按钮选择面板序号。
  2). 在 Text 框里输入想显示在状态条面板里的文本。
  3). 如果想加入图形,单击 Browse 按钮打开一个图形选择对话框,选择想加入的图形,然后单击打开按钮。
  4). 最后按确定按钮。
  5). 用代码显示的方式是: StatusBar1.Panels(x).Text = "New string to appear"
  6). 编写代码 
  如果是一个单面板状态条,当用户单击状态条时,只需用下面的事件过程来响应:
  Private Sub StatusBar1_Click()
  End Sub
   如果是一个多面板状态条,就需要鉴别用户单击的是哪一个面板,可用下面的事件过程来识别用户所单击的面板:
 Private Sub StatusBar1_PanelClick(ByVal Panel As Panel)
   Select Case Panel.Index
   Case 1
       'Code to follow if user clicks the first panel
   Case 2
        'Code to follow if user clicks the second panel
   Case 3
        'Code to follow if user clicks the third panel
   End Select
  End Sub
2.   创建工具栏
1. 建立工具条

  1). 在工具箱里单击工具条图标,拖到窗体的任何位置, Visual Basic 自动将 ToolBar 移到顶部。
  2). 按 F4 键打开属性窗口。
  3). 双击(Custom),打开 ToolBar 属性窗口。
  4). 选择 Buttons 标签。
  5). 单击 Insert 按钮, Visual Basic 就会在你的工具条上显示一个空按钮,现在为你的每一个按钮重复这一步。
  6). 单击确定按钮。
   如果想把按钮分组,首先生成一个分隔的按钮,再在刚才提到的对话框里将这个按钮的 Style 属性改为 3-Separator 。
(2) 为工具条增加图画
  1). 在 Visual Basic 工具箱里单击 ImageList 图标,并将它拖到窗体的任何位置(位置不重要,因为它总是不可见的)。
  2). 按 F4 打开属性窗口。
  3). 双击(Custom),打开 ImageListCtrl 属性窗口。
  4). 选择 Image 标签。
  5). 单击 Insert Picture ,在现在图形的对话框里选择想使用的位图或图标,然后单击打开按钮。为每个想添加图形的工具条按钮重复此步。
  6). 单击确定按钮。
  7). 单击工具条,按 F4 ,双击(Custom),显示 ToolBar 属性对话框。
  8). 选择 General 标签,在 ImageList 框里选择刚才添加的 ImageList 控件。
  9). 选择 Buttons 标签,单击紧挨 Index 框的向左或向右箭头以选择一个按钮序号。出现在工具条最左边的按钮序号为 1 。
  10). 在 Image 框里输入一个数,输入为 1 ,则显示刚才 ImageList 控件里的第一个图形,输入为 2 ,则显示刚才 ImageList 控件里的第二个图形。
  11). 为每个按钮重复第 10 步。
  12). 单击确定按钮,现在 Visual Basic 就会在工具条上显示精美的图形了。
(3) 为工具条添加文本信息
  在 ToolBar 属性对话框中选择 Buttons 标签,在 Caption 框里输入想显示在按钮上的文本。
(4) 添加 ToolTips
  ToolTips 是一种当点到工具按钮时弹出的小标签。 ToolTips 很方便,可以告诉那些新手每个按钮是干什么用的。在刚才提到的 ToolBar 属性对话框中选择 Buttons 标签,在 ToolTipText 框里输入想作为 ToolTip 的文本。
(5) 编写代码
  双击工具条,以下面的格式输入代码就可以了:
Private Sub Toolbar1_ButtonClick(ByVal Button As Button)
  Select Case Button.Index
  Case 1
   'Code to follow if user clicks the first button
  Case 2
      'Code to follow if user clicks the second button
  Case 3
      'Code to follow if user clicks the third button
  End Select
 End Sub
3.   创建进程条
   进程条的三个属性:
  (1). Min 属性代表进程条全空时的值,缺省时为 0 。
  (2). Max 属性代表进程条全空时的值,缺省时为 100 。
  (3) Value 属性代表进程条当前的值(不用在属性窗口里找这个属性,它不出现在属性窗口中,但它的确存在),它大于 Min 属性,小于 Max 属性。改变 Value 属性的值将改变进程条的进度显示。
   为了了解进程条的功能,在窗体里添加一个进程条和一个命令钮,双击命令钮进入代码窗口,键入如下代码:
Private Sub Command1_Click()
 If ProgressBar1.Value < ProgressBar1.Max Then
      ProgressBar1.Value = ProgressBar1.Value + 5
  Else
      ProgressBar1.Visible = False �当进程条满了的时候让进程条消失
  End If
End Sub
4.   创建滑块
(1) . 选择滑块的外观

   1). Orientation 属性决定滑块的方位,可以是垂直的或水平的滑块。
   2). TickStyle 属性决定滑块标记的样子。
   3). TickFrequency 属性规定了沿着滑块的标记的间隔大小,缺省的状态是 1 ,表明每个可能值都出现标记,如果把值设置为 3 ,则每三个可能值出现一个标记。
(2) 滑块的 Min , Max , Value 属性
   这三个属性和进程条的这三个属性差不多, Min , Max 表示滑块的最小和最大值, Value 表示进程条的当前值。
(3) 滑块的 LargeChange , SmallChange 属性
  LargeChange 规定了当用户用鼠标单击滑块时,滑块可移动的距离。 SmallChange 规定了用户按左箭头或右箭头时滑块的移动距离。
5. 创建 TabStrip 页框控件
(1) 设置样式

   在 TabStrip 属性窗口里选择 General 标签,在 Style 列表框里选择 Tabs 或 Buttons 样式。
(2) 规定 TabStrip 的标题和 ToolTips
  1). 在 TabStrip 属性窗口里选择 Tabs 标签,在 Caption 框里输入标题。
  2). 在 TabStrip 属性窗口里选择 Tabs 标签,在 ToolTipText 框里输入 ToolTip 。
(3) 增减标签总数
   在 TabStrip 属性窗口里选择 Tabs 标签,单击 Insert Tab 按钮增加标签,单击 Remove Tab 按钮删除标签。
(4) 在 TabStrip 上显示图形
  1) 在窗体里拖入一个 ImageList 控件,
  2) 按 F4 打开属性窗口。
  3) 双击(Custom),打开 ImageListCtrl 属性窗口并选择 Image 标签。
  4) 单击 Insert Picture ,在现在图形的对话框里选择想使用的位图或图标,然后单击打开按钮。为每个想添加图形的 Tab 按钮重复此步。
  5) 单击确定按钮。现在 ImageList 里存储了需要的图形。
  6) 选择 TabStrip ,进入 TabStrip 属性窗口并选择 General 标签,在 ImageList 列表框里选择 ImageList1 。
  7) 现在选择 Tabs 标签,单击紧挨 Index 框的向左或向右箭头以选择一个 Tab 序号。在 Image 框里输入一个数,输入为 1 ,则显示刚才 ImageList 控件里的第一个图形,输入为 2 ,则显示刚才 ImageList 控件里的第二个图形。
  8) 单击确定按钮。
(5) 用户响应
  可用类似下面的代码来识别用户在哪一个项目上单击。
 Private Sub TabStrip1_Click()
   Select Case TabStrip1.SelectedItem.Index
   Case 1
          'Code to follow if user clicks the first tab
   Case 2
          'Code to follow if user clicks the second tab
   Case 3
          'Code to follow if user clicks the third tab
   End Select
  End Sub
(6) 在 TabStrip 上放置其它控件
  在用户选择了标签后, TabStrip 要求编写代码来显示或隐藏控件。下面的代码上是一个 TabStrip 上有一个命令钮和一个选项钮的例子,当用户选择了第一个 Tab 时,选项钮出现,当用户选择了第二个 Tab 时,命令钮出现。
   Private Sub TabStrip1_Click()
     Select Case TabStrip1.SelectedItem.Index
      Case 1
       Command1.Visible = False
       Option1.Visible = True
      Case 2
       Command1.Visible = True
       Option1.Visible = False
      End Select
  End Sub

2.6  Visual Basic 的输入机制
   程序的基本操作就是数据的输入,数据处理和数据的输出。 Visual Basic 可中用于输入的控件主要有:文本框 Text Box 、复选框 Check Box 、选项按钮 Option Button 、列表框 List Box 、组合框 Combo Box 、滚动条 Scroll Bar 、通用对话框控件。还有一个函数叫 InputBox 函数,也可用于数据的输入。
1. 通过文本框输入数据
  只要取得文本框的 Text 属性就可以对其进行操作了。下面的代码可将 Text1 文本框的正文变成大写输出至 Text2 文本框。
   Private Sub Form_Click ()
          Text2.Text = UCase(Text1.Text)
   End Sub
2. 通过复选框和选项按钮输入数据
  只要检测到 Check Box 和 Radio Button 的 Value 属性值就可以知道它们是否被选上了。
3. 通过列表框和组合框输入数据
(1) 列表框 List Box 和组合框 Combo Box 的不同

   它们在 Windows 的 Open , Save As 对话框里最为常见。组合框又包括三种类型,这三种类型要在它的 Style 属性里设置。列表框仅仅把可以选择的项目列出来,而组合框里有的类型可以允许用户输入数据。它们的异同是:

名称是否有下拉选项是否允许用户输入
  列表框
  组合框类型 0
  组合框类型 1
  组合框类型 2

(2) 列表项目的增减
  使用 AddItem , RemoveItem 语句可以增减列表项目。通常将项目增减的语句放入 Form_Load 事件里。
  ListBoxName. AddItem item
  ComboBoxName. AddItem item

  item 是新项目名称,必须是字符串类型,非字符串类型可通过 Str 函数或 Format 函数来转换。
  列表框,组合框的每一项目都有一个 Index 值,第一个项目的 Index 值是 0 ,第二个是 1 ,依此类推。删除项目可通过删除其 Index 值来实现。
  ListBoxName. RemoveItem item
   ComboBoxName. RemoveItem item

  如: ListBoxName. RemoveItem 0 则删除了第一项,这时原来的第二项就变成了第一项。
  可以在设计阶段设定列表项目 , 方法是:
  在属性窗口选择 List 属性,将出现一个下拉列表,在列表中输入第一项,按 Ctrl+Enter ,输入第二项厖,最后用 Enter 结束。
(3)  取得列表框 / 组合框的数据
  可以通过取得 Text 属性或通过取得 ListIndex 属性来判断哪一项被选择了。 ListIndex 属性的值也同样是第一个为 0 ,第二个为 1厖如:
  If List1.Text = 揤isual Basic� Then Instructions
  If List1.ListIndex = 1 Then Instructions

  组合框有时允许用户自己输入数据,这时所输入数据的 ListIndex 值为- 1 。
4. 通过滚动条 Scroll Bar 取得数据
  在 Visual Basic 的工具箱里有两种滚动条:一种是垂直的,一种是水平的,它们的差异无非是摆放的方向不一样。
 (1) 滚动条的主要属性及事件
  1) Min , Max 属性

  Min 属性决定滚动条最左端或最顶端所代表的值。 Max 属性决定滚动条最右端或最下端所代表的值。
  2) LargeChange,SmallChange 属性
  SmallChange 决定在滚动条两端的箭头钮上单击时改变的值。 LargeChange 决定在滑块上方或下方区域单击时改变的值。
  3) Value 属性
  Value 属性代表当前滑块所处位置的值,这个值由滑块的相对位置决定。
  4) Change 事件
   当滑块位置发生变化时就引发了 Change 事件。
 (2) 取得滚动条的数据
  滚动条并不是一个数据输入的好控件,因为无法从滚动条上直接看出输入的数据,但它的优点是可以表示一定范围里的相对位置。为了得到数据,只要取得滚动条的 Value 属性就可以了。
5.  InputBox 函数
  InputBox 函数提供一个简单的对话框供用户输入信息。在把其它版本的 BASIC 程序移植到 Visual Basic 时, InputBox 函数通常用来代替 INPUT 语句。这个对话框的样子基本上是上面的样子。
  它的完整语法是: x = InputBox (prompt, title, default, xpos, ypos, helpfile, context)
  其中, prompt 是提示的字符串,这个参数是必须的。 title 是对话框的标题,是可选的。 default 是文本框里的缺省值,也是可选的。 xpos , ypos 决定输入框的位置。 helpfile , context 用于显示与该框相关的帮助屏幕。返回值 x 将是用户在文本框里输入的数据, x 是一个字符串类型的值。如果用户按了 Cancel 钮,则 x 将为空字符串。
6. 使用通用对话框控件
  Windows 应用程序里的 Open 对话框, Save As 对话框在各个应用程序里看起来都是一样的,通用对话框控件就可以提供这些对话框的标准功能。
 (1) Open 对话框及 Save As 对话框
  打开 Open 对话框使用 ShowOpen 方法,打开 Save As 对话框使用 ShowSave 方法。
  Private Sub mnuOpen_Click ()
      On Error GoTo ErrorHandler
       CommonDialog1.CancelError = True
       CommonDialog1.Filter = "Text Files (*.txt)|*.txt|Batch Files (*.bat)|*.bat|All Files (*.*)|*.*"
       CommonDialog1.ShowOpen ' display Open common dialog box.
       Call OpenFile(CommonDialog1.FileName)
  ErrorHandler:
       Exit Sub
 End Sub
  其中第三行决定了在文件格式类型栏里出现的文件类型。第五行需要一个自己的打开文件的过程,这个过程需要的参数就是通用对话框返回的文件名。通用对话框的 CancelError 属性设为 True 的话,用户单击 Cancel 按钮将产生一个错误信息程序,凭借这个信息程序可以检测到用户的放弃操作。
(2) Color 对话框
  下面的过程可用用户选择的颜色作为窗体的底色。
 Private Sub mnuColor_Click ()
   On Error GoTo CancelButton
   CommonDialog1.CancelError = True
   CommonDialog1.ShowColor
   Form1.BackColor = CommonDialog1.Color
   CancelButton:
  Exit Sub
 End Sub
(3) Fonts 对话框
  下面的过程可用字体对话框改变文本框的字体 :
  Private Sub mnuFonts_Click ()
   On Error GoTo CancelButton
   CommonDialog1.CancelError = True
   CommonDialog1.Flags = cdlCFBoth ' Flags property must be set to cdlCFBoth
   CommonDialog1.ShowFont ' Display Font common dialog box.
   Text1.FontName = CommonDialog1.FontName
   Text1.FontSize = CommonDialog1.FontSize
   Text1.FontBold = CommonDialog1.FontBold
   Text1.FontItalic = CommonDialog1.FontItalic
   Text1.FontUnderline = CommonDialog1.FontUnderline
   Text1.FontStrikethru = CommonDialog1.FontStrikethru
   Text1.ForeColor = CommonDialog1.Color
  CancelButton:
   Exit Sub
  End Sub
  代码的第三行出现了通用对话框的 Flags 属性决定了通用对话框的一些可选项,不过即使不赋值给 Flags ,代码也一样会按缺省的情况去执行的。

2.7  Visual Basic 的输出机制
   作为输出的对象, Visual Basic 提供了标签,文本框,窗体,图片框(Picture Box)等用于输出,而且 Visual Basic 里也有一堆命令、属性涉及信息的输出,较常用的有: MsgBox 函数, Print 方法, Cls 方法, Tab 函数, Format 函数, FontName , FontSize , FontBold , FontItalic , FontStrikethru , FontUnderline 属性, CurrentX , CurrentY 属性等。
1. 通过 MsgBox 函数输出
 了解 Windows 应用程序的人都知道当用户操作错误时,应用程序往往打出一个消息框来提示用户的错误,象这样:
  Dim Action As Integer
  Action = MsgBox(" 单击确定键将引爆此计算机! ", vbYesNo + vbCritical + vbDefaultButton2, " 警告! ")
  If Action = 6 Then Explode
  这个功能在 Visual Basic 里是通过 MsgBox 函数来实现的,这样程序员就不必自己去画一个消息框了。语法是:
  Action = MsgBox (msg, type, title)
  其中, msg 是消息的内容,是一个字符串型的变量, type 及 title 参数是可以省略的, type 参数指定显示的按钮是什么及使用什么样的图标(这个参数往往让新程序员思考几分钟), title 参数指定消息框的标题。 type 参数的含义是:

数值符号常量 意义  
0vbOKOnly 只显示 Ok 按钮
1 vbOKCancel 显示 Ok  Cancel 按钮
2vbAbortRetryIgnore 显示 Abor  Retry  Ignore 按钮
3vbYesNoCancel  显示 Yes  No  Cancel 按钮
4vbYesNo  显示 Yes  No 按钮  
5vbRetryCancel 显示 Retry Cancel 按钮
16vbCritical  Stop Sign 对极其重要的问题提醒用户
32 vbQuestion Question Mark 增亮没有危险的问题
48vbExclamation Exclamation Mark 强调警告用户必须知道的事情
64vbInformation Information Mark 可以使乏味的信息变得有趣
0vbDefaultButton1 第一个按钮缺省
256vbDefaultButton2  第二个按钮缺省
512vbDefaultButton3  第三个按钮缺省  

  例如: Action = MsgBox (揂re you girl?�, vbYesNo + vbQuestion, 換uestion�) 。使用这个函数时 Visual Basic 将产生一个标题为 Question ,具有问号和 Yes , No 按钮的消息框。作为一个函数,本质上还是要返回值的, MsgBox 的返回值确定了用户的选择,程序可根据返回值做出相应的动作。

返回值含义返回值含义
1 选择 Ok 按钮 5 选择 Ignore 按钮
 2 选择 Cancel 按钮 选择 Yes 按钮
 3 选择 Abort 按钮 7 选择 No 按钮
 4 选择 Retry 按钮  

2. Print 方法, Cls 方法, Tab 函数
 (1) Print 方法

   Print 方法的语法是: object. Print expressionlist
  object 表示 Print 作用的对象,比如是 Form 或者是 Picture Box , object 是可以省略的,省略时的 Print 往往在窗体上输出。 expressionlist 是输出的内容,允许许多项数据的输出,在数据间可以加入� ,�或� ;�。加入分号将使下一数据项紧挨着上一数据项输出。而加入逗号,则 Visual Basic 将下一数据项在下一打印区输出,其实就是空了几个空格后再输出。两个打印区之间有 14 个字符的宽度,其实这也很难衡量,比如 14 个� W�所占的宽度大概是 14 个� i�所占宽度的三倍多。幸好中国日本之类的方块字所占的宽度基本上是一样的,所以较好处理一些。
(2) Tab 函数
   Tab 函数只用在 Print 方法中,它用来移动下一个字符到打印位置,这将省去数空格的功夫。语法是: Tab (column)
   Tab 函数将 Visual Basic 自定义的 14 字符宽的打印区扔到一边,用自己的方式定义了新的灵活的打印区宽度。
(3) Cls 方法
  Cls 也是一个古老的 BASIC 语句 , 原来它的作用总是把屏幕变成黑色,然后在左上角或左下角闪烁一个光标, Visual Basic 里它的作用是清除绘图语句和 Print 语句产生的文字和图形。
  语法是: object. Cls
   object 指清除的对象,可以是 Form 或 Picture Box 。如果 object 省略,通常 Visual Basic 都把当前的窗口作为 Cls 操作的对象。
3. Format 函数
  Format 函数用于制定字符串或数字的输出格式。语法是: x = Format (expression,fmt)
  expression 是所输出的内容。 fmt 是指输出的格式,这是一个字符串型的变量,这一项若省略的话,那么 Format 函数将和 Str 函数的功能差不多。如:

语句输出
Format (2, �0.00�)2.00
 Format (.7, �0%�)  70% 
Format (1140, �$#,##0�) $1,140

   简单地, fmt 里的字符是这样的:

字符意义字符意义
 0   显示一数字,若此位置没有数字则补 0  .  小数点
 #   显示一数字,若此位置没有数字则不显示  ,   千位的分隔符
 %   数字乘以 100 并在右边加上� %�号 - + $ ( )   这些字出现在 fmt 里将原样打出

  Format 函数也可用来对时间进行输出。

fmt输出fmt输出
m/d/yy  8/16/96  h:mm:ss a/p 10:41:29 p 
d-mmmm-yy  16-August-96  h:mm  22:41 
d-mmmm  16-August  h:mm:ss  22:41:29 
mmmm-yy  august-96  m/d/yy h:mm  8/16/96 22:41 
hh:mm AM/PM  10:41 PM

4. FontName , FontSize , FontBold , FontItalic , FontStrikethru , FontUnderline 属性
  很明显,这些属性都与字体有关,许多控件都有这些属性。通常它们在设计阶段可以双击 font 属性来设置,运行期间可以直接设置。它们的意义是:

FontName  字体的名称   FontItalic   字体是否用斜体显示  
FontSize   字体的大小FontStrikethru  字体是否有删除线  
FontBold 字体是否用粗体显示FontUnderline   字体是否有下划线

   如: Text1.FontBold = True ,将把 Text1 文本框的 FontBold 属性设为 True 。
5. 窗体,图片框的 CurrentX , CurrentY 属性
   这两个不可见的属性确定了下一次打印或绘图的水平及垂直坐标。如上面讲的 Print 方法,当 expression 后使用 �,� 时, Visual Basic 将改变 CurrentX , CurrentY 值为下一打印区域开始的值,于是,输出便指向了下一个打印区域。而 Cls 方法将把操作对象的 CurrentX , CurrentY 的值设为 (0,0) 。
6. 通过标签控件输出
  标签控件的特点是运行时不能直接修改它,通常一个文本框旁边都有一个标签用来标识文本框。标签的 Autosize 和 WordWrap 属性是一对有用且令人困惑的属性。

申明
非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!
博文欢迎转载,但请给出原文连接。

  • 7
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VB设计显示界面时,可以采用以下步骤来进行设计: 1. 确定界面的整体布局:首先,需要确定界面的整体布局,包括界面的大小、位置和分区等,可以使用VB提供的拖拽、调整和排列控件的功能来完成。 2. 添加控件:根据界面的需求,选择合适的控件来实现功能。例如,如果需要显示文本信息,可以使用标签(Label)控件或文本框(TextBox)控件;如果需要显示图像,可以使用图片框(PictureBox)控件;如果需要提供选择选项,可以使用复选框(CheckBox)或单选钮(RadioButton)等控件。可以通过在工具箱中选择相应的控件,然后在界面上拖拽放置来添加控件。 3. 自定义控件属性:根据需求,对添加的控件进行自定义。例如,可以设置控件的字体、颜色、大小、对齐方式等属性,以及控件的事件处理程序等。 4. 调整控件位置和大小:可以通过调整控件的位置和大小来使界面更加美观和合理。在VB中,可以使用鼠标拖动控件来移动其位置,也可以通过属性窗口来设置控件的位置和大小。 5. 设计界面交互:根据界面的需求,添加相应的代码来实现界面的交互功能。例如,可以通过按钮(Button)控件的Click事件来触发相应的操作,或使用文本框(TextBox)控件的TextChanged事件来响应用户输入。 6. 运行和测试界面:在设计界面完成后,可以点击运行按钮来查看界面的效果,或者使用调试功能来测试界面和功能的运行是否正常。 总之,在VB中设计显示界面需要综合考虑界面布局、控件选择、属性设置、位置调整和交互设计等方面,通过灵活运用VB提供的功能和方法来实现所需的界面效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值