灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:5150回复:0

[系统教程]Visual Basic 属性、方法和事件

楼主#
更多 发布于:2011-11-20 07:21
属性、方法和事件概述

    Visual Basic 的窗体和控件是具有自己的属性、方法和事件的对象。可以把属性看作一个对象的性质,把方法看作对象的动作,把事件看作对象的响应。日常生活中的对象,如小孩玩的气球同样具有属性、方法和事件。气球的属性包括可以看到的一些性质,如它的直径和颜色。其它一些属性描述气球的状态(充气的或未充气的)或不可见的性质,如它的寿命。通过定义,所有气球都具有这些属性;这些属性也会因气球的不同而不同。
    气球还具有本身所固有的方法和动作。如:充气方法(用氦气充满气球的动作),放气方法(排出气球中的气体)和上升方法(放手让气球飞走)。所有的气球都具备这些能力。
    气球还有预定义的对某些外部事件的响应。例如,气球对刺破它的事件响应是放气,对放手事件的响应是升空。

图片:50_3710_f80e1e2fdfed03d.gif


    如果能对气球编程的话,Visual Basic 代码将如下所示。其作用是设置气球的属性:
    Balloon.Color = Red
    Balloon.Diameter = 10
    Balloon.Inflated = True
    注意代码的语法,首先是对象 (Balloon),接着是属性 (Color),然后是赋值(Red)。重复这条语句,但是,换一个不同的值,就可以改变气球的颜色。属性也可以在程序设计阶段在“属性”窗口中设置。
    调用气球的方法是这样的:
    Balloon.Inflate
    Balloon.Deflate
    Balloon.Rise 5
    它的语法与属性的语法相似,对象(一个名词)后面紧跟着方法(一个动词)。在第三个例子中有一个附加项,称为一个参数,表示气球上升的高度。一些方法有一个或多个参数,它们对执行的动作做进一步的描述。
    气球对一个事件的响应如下所示:
    Sub Balloon_Puncture()
      Balloon.Deflate
      Balloon.MakeNoise "Bang"
      Balloon.Inflated = False
      Balloon.Diameter = 1
    End Sub
    本例中代码描述了当刺穿事件发生时气球的行为:调用 Deflate 方法,然后以 "Bang"(发出的声响)为参数调用 MakeNoise 方法。因为气球已不再是充气状态,所以把 Inflated 属性置为 False,并给 Diameter 属性设置一个新值。
    实际上对气球不能编程,但是,可以对 Visual Basic 的窗体或控件进行编程。作为程序员,由您作主。您决定应更改哪些属性,调用哪些方法,对哪些事件作出响应,从而得到希望的外观和行为。

设计窗体

    窗体对象是 Visual Basic 应用程序的基本构造模块,是运行应用程序时与用户交互操作的实际窗口。窗体有自己的属性、事件和方法用于控制其外观和行为。
    设计窗体的第一步是设置它的属性。这可以在设计时在“属性”窗口中完成,或者运行时由代码来实现。
    注意 设计时,即在 Visual Basic 环境中创建应用程序的任何时刻,此时你可以操作窗体和控件,设置它们的属性,对它们的事件编程。运行时是指实际运行应用程序并与应用程序进行交互的时间。

图片:50_3710_ce527180d904e1e.gif


    设置窗体属性
    窗体的许多属性会影响窗体的外观。Caption 属性决定窗体标题栏中显示的文本;图标属性设置在窗体最小化时显示的图标。MaxButton 和 MinButton属性决定窗体是否能最大化或最小化。通过改变 BorderStyle 属性,可以控制窗体如何调整大小。
    Height 和 Width 属性决定的窗体初始大小;Left 和 Top 属性根据屏幕的左上角确定窗体的位置。WindowState 属性可以把窗体设成在启动时最大化、最小化或正常大小。
    Name 属性设置窗体的名称,在代码中用这个名称引用该窗体。首次在工
程中添加窗体时,该窗体的名称被缺省为 Form1;添加第二个窗体,其名称被缺省为 Form2,以此类推。最好给 Name 属性设置一个有实际意义的名称,如给一个条目窗体命名为 "frmEntry"。
    熟悉这些窗体属性,最好的办法是实践。在“属性”窗口(图 3.3)中更改窗体的一些属性,然后运行该应用程序并观察修改的效果。如果想详细了解每个属性,可以选择该属性并按 F1 键查看联机帮助。

    窗体事件和方法
    窗体作为对象,能够执行方法并对事件作出响应。
    无论是因为用户交互,还是通过代码调整窗体的大小,都会触发一个 Resize事件。当窗体尺寸变化时,允许您在窗体上进行移动控件或调整控件大小等操作。
    每当一个窗体变成活动窗体时,就会产生一个 Activate 事件;当另一个窗体或应用程序被激活时,就会产生 Deactivate 事件。这些事件对初始化或结束窗体行为十分方便。例如,在 Activate 事件中,可以编写代码突出显示一个特定文本框中的文本;在 Deactivate 事件中,可以把更改保存到一个文件或数据库中。
    要使一个窗体可见,可调用 Show 方法:
    Form2.Show
    调用 Show 方法与设置窗体 Visible 属性为 True 具有相同的效果。
    窗体的许多方法都调用文本或图形。Print、Line、Circle 和 Refresh 方法可
用于直接在窗体表面上写和画。这些方法和更多的方法将在第十二章“使用文本和图形”中详细讨论。
    详细信息 关于窗体的详细信息,请参阅第六章“创建用户界面”中的“再论窗体”。

图片:50_3710_bf19fc5e3b8c844.gif



单击按钮执行操作

    使用户与应用程序交互的最简便的方法是给用户提供一个按钮。可以用Visual Basic 提供的 CommandButton 控件,或利用包含图形的 Image 控件,如一个图标,来创建自己的“按钮”。

    使用 CommandButton
    大多数 Visual Basic 应用程序都有 CommandButton,使用户通过简单的敲击按钮来执行操作。当用户选中按钮时,不仅会执行相应操作,还会使该按钮看上去象被按下并释放一样。无论何时,只要用户单击按钮,就会调用 Click 事件过程。将代码写入 Click 事件过程,执行想要执行的动作。
    在程序执行时,有多种方法可以选中 CommandButton :
    用鼠标单击按钮。
    按 TAB 键把焦点移到相应按钮上,然后按 SPACE 键或 ENTER 键选中该按钮。参阅本章后面的“焦点概述”。
    按 CommandButton 的快捷键(ALT +下划线的字符)。
    在代码中设 CommandButton 的 Value 属性为 True。 cmdClose.Value = True
    在代码中调用 CommandButton 的 Click 事件。 cmdClose_Click
    如果该 CommandButton 是窗体的缺省命令按钮,既使将焦点移到其它不是 CommandButton 的控件上,按下回车键也会选中该按钮。在设计时,通过设置某按钮的 Default 属性为 True ,指定它为窗体的缺省CommandButton 。
    如果该 CommandButton 是窗体的缺省的取消按钮,即使把焦点移到其它控件上,也能通过按 ESC 键选中该按钮。在设计时,通过设置某按钮的 Cancel 属性为 True,指定它为窗体的缺省的取消按钮。 所有这些操作都使 Visual Basic 调用 Click 事件过程。

    “测试按钮”应用程序
    利用 Caption 属性可以在按钮上显示文字,告诉用户该按钮的功能。在图3.4 中,在控件示例应用程序的测试按钮范例中包含一个 Caption 属性为"Change Signal" 的 CommandButton(此例的工作为Controls.vbp 示例应用程序中的 Buttons.frm)。
    注意,S 是这个按钮的快捷键,用一条下划线表示。在 Caption 属性的正文内插入一个 (;) 符号,将使得此符号后面的字符成为该按钮的快捷键(例如,Change ;Signal)。
    用户单击 CommandButton,将执行该 CommandButton 的 Click 事件过程中的代码。在这个范例中,每次单击按钮,将变换一个不同的交通灯图标。
    详细信息 关于 CommandButton 的属性的详细信息,请参阅第七章“使用Visual Basic 的标准控件”。

图片:50_3710_689b914b3aa17e4.gif


用于显示和输入文本的控件

    Label 和 TextBox 控件是用于显示和输入文本的。让应用程序在窗体中显示文本时使用 Label,允许用户输入文本时用 TextBox。Labels 中的文本为只读文本,而 TextBox 中的文本为可编辑文本。
    可由用户编辑的文本,例如一个顺序条目     TextBox
    字段或一个密码框
    只能显示的文本,例如在窗体中标识一个     Label
    字段或给用户显示指令

    Labels 和 TextBoxes 将在以下部分讨论:
     用 Label 显示文本(vbconUsingLabels)使用 Label 控件的基本知识。
     使用 TextBox(vbconWorkingWithTextBox)使用 TextBox 的基本知识。

    用 Label 显示文本
    Label 控件显示的文本用户不能直接修改。如 TextBox 和 ScrollBar 这些没有自己的 Caption 属性的控件,可以用 Label 标识。在 Label 中实际显示的文本是由 Caption 属性控制的,该属性可以在设计时在“属性”窗口中设置或在运行时用代码赋值。
    在缺省情况下,标题是 Label 控件中唯一的可见部分。但是,如果把BorderStyle 属性设成 1(可以在设计时进行),那么 Label 就有了一个边框,看起来像一个 TextBox。还可以通过设置 Label 的 BackColor、BackStyle、ForeColor 和 Font 属性来,改变 Label 的外观。

    改变 Label 尺寸以适应其内容
    设计时可在“属性”窗口中指定单行 Label 的标题。但是如果要输入一个较长的或在运行时可能变化的标题,该怎么办呢?Label 提供了两种属性:AutoSize 和 WordWrap,用于帮助您改变控件尺寸以适合较长或较短的标题。
    AutoSize 属性决定控件是否自动改变尺寸以适应其内容。如该属性设为True,Label 就会根据其内容进行水平方向变化,如图 3.5 所示。

图片:50_3710_9bd7004ed5abbb6.gif


    WordWrap 属性使 Label 根据其内容进行垂直方向变化,而保持其宽度不变,如图3.6 所示。本例的工作版,请参阅应用程序示例 Controls.vbp 中的 WordWrap.frm。
    注意 如果在 Controls.vbp 中运行AotoSize示例,就会发现为了同时使用 WordWrap,必须两个复选框都选中。这是因为,要想使 Label 的WordWrap 属性起作用,就必须设置 AutoSize 为 True。只有在一个单字的宽度超过控件的当前宽度时,Label 的宽度才会增加。
    详细信息 关于 Label 控件属性的详细信息,请参阅第七章“使用 VisualBasic 的标准控件”。

图片:50_3710_8230bc8cc54bb69.gif


    使用 Text Boxes
    TextBox 是一种通用控件,可以由用户输入文本或显示文本。除非把TextBox 的 Locked 属性设为 True,否则不能用 TextBox 显示不希望用户更改的文本。
    TextBox 中显示的实际文本是受 Text 属性控制的。Text 属性可以用三种方式设置:设计时在“属性”窗口进行、运行时通过代码置或在运行时由用户输入。通过读 Text 属性能在运行时检索 TextBox 的当前内容。
    多行 Text Box 和 Word Wrap
    TextBox 在缺省情况下只显示单行文本,且不显示 ScrollBar。如果文本长度超过可用空间,则只能显示部分文本。通过设置 MultiLine 和 ScrollBars两种属性(只能在设计程序时设置),可以改变 TextBox 的外观和行为。
    注意 不要把 ScrollBars 属性与 ScrollBar 控件混淆,ScrollBar 控件并不属于 TextBox,它具有自己的属性集。
    把MultiLine属性设为True,可以使 TextBox 在运行时接受或显示多行文本。只要没有水平方向ScrollBar,多行TextBox 中的文本会自动按字换行。ScrollBars 属性的缺省值被设置为0(None)。自动按字换行省去用户在行尾插入换行符的麻烦。当一行文本已超过所能显示的长度时,TextBox自动将文本折回到下一行显示。
    在设计时,不能在“属性”窗口输入换行符。在过程中,可以通过插入一个回车加上换行符(ANSI 字符 13 和 0)来产生一个行断点。也可以用常量 vbCrLf 插入一个回车与换行符组合。例如,下面的事件过程是在加载窗体时,把两行文本放入一个多行 TextBox (Text1) 中的示例。
    Sub Form_Load ()
      Text1.Text = "Here are two lines" _
      ; vbCrLf ; "in a text box"
    End Sub

    使用 TextBox 中的文本
    利用 TextBox 的 SelStart、SelLength 和 SelText 属性,可以控制 TextBox的插入点和选择行为。这些属性仅能在运行时使用。
    当一个 TextBox 首次得到焦点时,TextBox 缺省的插入点和光标位置在文本的最左边。用户可以用键盘和鼠标移动它们。当 TextBox 失去焦点而后再得到时,插入点位置与用户最后设置的位置一样。
    在有些情况下,它可能与用户设置不一致。如:在字处理应用程序中,用户会希望新字符出现在已有文本后面;在数据项应用程序中,用户会希望他的输入替换原有条目。使用 SelStart 和 SelLength 属性,用户可以根据需要改变 TextBox 的行为。
    SelStart 属性是一个数字,指示文本串内的插入点,其中 0 表示最左边的位置。如果 SelStart 属性值大于或等于文本中的字符数,那么插入点将被放在最后一个字符之后,如图 3.7 所示。该例子的工作版,请参阅应用程序示例 Controls.vbp 中的 Text.frm。    SelLength 属性是一个设置插入点宽度的数值。把SelLength设为大于 0 的值,会选中并突出显示从当前插入点开始的SelLength个字符。图3.8 显示选择的性能。
    如果有一段文本被选中,此时用户键入的文字将替换被选中的文本。有些情况下,也可以用粘贴命令用新文本替换原有的文本。 SelText 属性是一串文本,可以在运行时给它赋值以替换当前选中的文本。如果没有选中的文本, SelText 将在当前插入点插入文本。
详细信息 关于 TextBox 控件的属性的详细信息,请参阅第七章“使用Visual Basic 的标准控件”。

图片:50_3710_df8c46a136e25cc.gif

    

图片:50_3710_45365d0096361d0.gif


    详细信息 关于 TextBox 控件的属性的详细信息,请参阅第七章“使用Visual Basic 的标准控件”。

为用户提供选择的控件

    大多数应用程序需要向用户提供选择,如简单的“Yes/No”选项、或者从包含成百个可能性的列表中进行选择。Visual Basic 包含几种用于提供选择的标准控件。下列表格总结了这些控件及其用途。

图片:50_3710_3af151909873d79.gif


    用 CheckBox 选择单个选项
    CheckBox 表明一个特定的状态是选定 (on) 还是清除 (off)。在应用程序中使用 CheckBox 为用户提供了“True/False”或“yes/no”的选择。因为CheckBox 彼此独立工作,所以用户可以同时选择任意多个 CheckBox。例如,在图 3.9 中,可同时选定粗体和斜体。

图片:50_3710_894ce0bb00a457e.gif


    CheckBox 应用程序
    这个例子使用一个 CheckBox 来决定文本用普通字体还是用斜体字显示。关于此例的工作版本,请参阅应用程序示例 Controls.vbp 中的 Check.frm。如图 3.10 所示,此应用程序有一个 TextBox,一个 Label,一个CommandButton 和两个 CheckBox。

图片:50_3710_d575da0bfb19b33.gif


    下表列出了应用程序中的对象的属性设置。

图片:50_3710_6bca67b2d90b70b.gif


    选定粗体或斜体时,CheckBox 的 Value 属性值设置为 1 ,不选定时为 0。缺省 Value 值为 0,所以除非改变 Value 属性值,否则第一次显示时不会选定 CheckBox。可以用常量 vbChecked 和 vbUnchecked 表示数值 1 和0。

    check box 应用程序中的事件
    当单击 CheckBox 时,会发生 CheckBox 的 Click 事件。此事件过程测试是否选定 CheckBox(即是否 Value = vbChecked)。如果选定,通过设置 Font对象的 Bold 或 Italic 属性,将文本转换为粗体或斜体;该 Font 对象是由TextBox 的 Font 属性返回的。
    Private Sub chkBold_Click ()
       If ChkBold.Value = vbChecked Then    '如果选定。
          txtDisplay.Font.Bold = True
       Else                   '如果没有选定。
          txtDisplay.Font.Bold = False
       End If
    End Sub
    Private Sub chkItalic_Click ()
       If ChkItalic.Value = vbChecked Then     '如果选定。
          txtDisplay.Font.Italic = True
       Else                    '如果没有选定。
          txtDisplay.Font.Italic = False
       End If
    End Sub

    用选项按钮进行选项分组
    选项按钮表示给用户一组两个或更多的选择。但是,不同于 CheckBox,选项按钮总是作为一组的组成部分工作的;因此,选择一个选项按钮就会立即清除该组中的其它按钮。定义一个选项按钮组,告诉用户“这是一组选择,从中选一个,而且只选一个”。
    例如,在图 3.11 所示的选项按钮组中,用户只能在三个选项按钮中选择一个。

图片:50_3710_a00cdd46dd90151.gif


    创建选项按钮组
    直接放在一个窗体中(也就是不在 Frame 或 PictureBox 中)的所有的选项按钮构成一组。如果想创建别的选项按钮组,必须将其中一些选项按钮组放到 Frame 或 PictureBox 中去。
    所有在给定的 Frame 中的选项按钮,组成一个独立的组,在 PictureBox 中的所有选项按钮也是如此。用这种方法生成一个独立的组时,总是要先画好一个 Frame 或 PictureBox ,然后,将选项按钮画到里面。图 3.12 显示了一个具有两个选项按钮组的窗体。

图片:50_3710_42de54ea4419c9e.gif


    在 Frame 中画了一组选项按钮后,用户只能在组内选择一个选项按钮。要在 Frame 中为控件分组,请按照以下步骤执行:
    1. 在“工具箱”中选择 Frame 控件,并在窗体上画出 Frame。
    2. 在“工具箱”中选择 OptionButton 控件,并在 Frame 内画出控件。
    3. 如果还想在 Frame 中增加选项按钮,重复步骤 2。先画 Frame ,再在 Frame 上画每个控件,这样移动 Frame 时控件会一起移动。如果将已经存在的控件移到 Frame 上,此控件不会和 Frame 一起移动。
    注意 如果将已存在的控件分组到一个 Frame 中去,可以选择这些控件,然后剪贴到 Frame 或 Picture 控件上去。

    控件的容器
    当控件是独立的对象时,窗体和控件之间存在着某种父子关系。图 3.12 表明 选项按钮怎样才能包含在一个窗体或一个 Frame 控件中。
    要理解容器的概念,首先要把所有的控件都想象为所在窗体的孩子。实际上,大多数控件都支持只读 Parent 属性,它的值就是控件所在的窗体。作为孩子,控件决定其在父窗体上的位置。控件的 Left 属性和 Top 属性是相对父窗体而言,且控件不能移出父窗体的边界。移动容器的同时也移动了控件,因此控件与容器的相对位置不变(即控件的 Left 属性和 Top 属性不变)。

    选定或禁止选项按钮
    一个选项按钮可以用以下方法选择:
    1.在运行期间用鼠标单击选项按钮。
    2.用Tab键定位到选项按钮组,然后在组内使用方向键(箭头键)定位选项按钮。
    3.用代码将它的 Value 属性设置为 True:optChoice.Value = True
    4.使用在 Label 的标题中指定的快捷键。
    5.要使某个按钮成为选项按钮组中的缺省按钮,只要在设计时将其 Value属性设置成 True。它保持被选中状态,直到用户选择另一个不同的选项按钮或用代码改变它。
    要禁用选项按钮,将其 Enabled 属性设置为 False。程序运行时,若此选项按钮变灰,表示无法选取此选项按钮。

    Options 应用程序
    图 3.13 所示的窗体使用选项按钮为一台计算机选择处理器类型和操作系统。当用户在组内选择了选项按钮后,Label 的标题就改变,反映当前的选择。关于此例的工作版本,请参阅应用程序示例 Controls.vbp 中的Options.frm。

图片:50_3710_c0a39bcfd859f44.gif


    下表列出了应用程序中对象属性的设置。

图片:50_3710_09f9743f9d579a6.gif


    Options 应用程序中的事件
    选项应用程序对事件的响应如下:
     前三个选项按钮的 Click 事件为窗体级的 string 变量 strComputer 分配一个相应的描述。
     后两个选项按钮的 Click 事件为第二个窗体级变量 strSystem 分配一个相应的描述。
    这个方法的关键就在于使用这两个窗体级变量,strComputer 和strSystem。这两个变量具有不同的 string 值,选项按钮的最后选定就依赖于这些值。
    每次选择新的选项按钮,其 Click 事件的代码就更新相应变量的值。
    Private Sub opt586_Click()
     strComputer = "Pentium"
      Call DisplayCaption
    End Sub
    然后它调用一个名为 DisplayCaption 的过程,此过程把两个变量连在一起并改变 Label 的 Caption 属性。
    Sub DisplayCaption()
    lblDisplay.Caption = "You selected a " ;
    _strComputer ; " running " ; strSystem
    End Sub
    使用子过程是因为改变 Caption 属性的过程对所有五个选项按钮来说基本是一样的,只不过变量的值因情况而异。这就可以避免在每个 Click 事件中重复同样的代码。
    详细信息 变量和子过程将在第五章“编程基础”中讨论。

    使用 ListBox 和 ComboBox
    ListBox 和 ComboBox 为用户提供了选择。按照缺省规定,选项以垂直单列方式显示,也可以设置成多列方式。如果项目数量超过 ComboBox 或ListBox 所能显示的数目,ScrollBar 自动出现在控件上。于是用户可以在列表中上下左右滚动。图 3.14 为一个单列 ListBox。

图片:50_3710_0e2d755bc9b7347.gif


    ComboBox 兼有 TextBox 和 ListBox 两者的功能。该控件允许用户通过键入文本或选择列表中的项目来进行选择。图 3.15 为一个 ComboBox。

图片:50_3710_64bfb0679a6cb7e.gif


    与其它含有单值的控件相反,例如 Label 的 Caption 属性或 TextBox 的text 属性,ListBox 和 ComboBox 含有多个值或值的集合。在运行时用内置的方法增加、删除及保持集合中的值。要将几条项目添加到名为 List1 的ListBox 中,其代码如下:    List1.AddItem "Paris"
    List1.AddItem "New York"
    List1.AddItem "San Francisco"
    ListBox 和 ComboBox 是在有限空间为用户提供大量选项的有效方法。
    详细信息 关于 ListBox 和 ComboBox 控件的详细信息,请参阅第七章“使用 Visual Basic 的标准控件”。

使用 ScrollBar 作为输入设备

    滚动条通常与 TextBox 或窗口一起使用,但有时也可作输入设备。因为ScrollBar 控件可按比例指示当前位置,所以可以单独使用以控制程序输入,如控制声音音量或调整图片颜色。HScrollBar(水平)和 VScrollBar(垂直)控件是独立的,它有自己的事件、属性和方法集。ScrollBar 控件与附属于TextBox、ListBox、ComboBox 或 MDI 窗体的内部 ScrollBar 不同。(TextBox 和 MDI 窗体具有 ScrollBars 属性,可增加或删除附属于控件的 ScrollBar。)
    现在 Windows 界面提示行支持 Slider 控件作为输入设备而不用ScrollBar。关于 Slider 控件的例子,请参阅 Windows 95 的控件面板。VisualBasic 的专业版和企业版中包含一个 Windows 95 风格的 Slider 控件。
    详细信息 关于 ScrollBar 控件的详细信息,请参阅第七章“使用 VisualBasic 的标准控件”。

显示图片和图形的控件
    因为 Windows 是图形用户界面,所以在应用程序上界面显示图形图像的方法十分重要。Visual Basic 包含四个控件以简化与图形有关的操作,它们是PictureBox 控件、Image 控件、Shape 控件和 Line 控件。
    Image、Shape 和 Line 控件有时被称作轻量图形控件。它们需要较少的系统资源,因此比 PictureBox 控件显示得快并且包含 PictureBox 中可用的属性、方法和事件的子集。每一个控件都适用于一个特定的目的。

图片:50_3710_2d430e35eacf7e0.gif

 

    使用 PictureBox 控件
    PictureBox 控件的主要作用是为用户显示图片。实际显示图片由 Picture 属性决定。Picture 属性包括被显示的图片的文件名(及可选的路径名)。
    注意 窗体对象也具有 Picture 属性,通过设置该属性可直接在窗体背景上显示图片。
    要在运行时显示或替换图片,可利用函数 LoadPicture 来设置 Picture 属性。提供图片文件名和可选路径名,由 LoadPicture 函数处理加载和显示图片的细节。
    picMain.Picture = LoadPicture("VANGOGH.BMP")
    PictureBox 控件具有 AutoSize 属性,当该属性设置为 True 时,PictureBox能自动调整大小与显示的图片匹配。如果要用 AutoSize 属性设置为 True的 PictureBox ,设计窗体时就需要特别小心。图片将不考虑窗体上的其它控件而调整大小,这可能导致意想不到的后果,如覆盖其它控件。设计时应通过加载每一幅图片来检查是否有这种现象发生。

    使用 PictureBox 作为容器
    Picture box 控件也可以用作其它控件的容器。像 Frame 控件一样,可以在PictureBox 控件上面加上其它控件。这些控件随 PictureBox 移动而移动,其 Top 和 Left 属性是相对 PictureBox 而言,而与窗体无关。
    PictureBox 容器的一种普通用法是 ToolBar 或 StatusBar 。可将 Image 控件置于这些容器中作为按钮或添加Label显示状态信息。将Align属性设置为Top、Bottom、Left或Right ,PictureBox将粘贴在窗体的边缘。图 3.16 为一个Align属性设置为Bottom的PictureBox 。它包含两个可用于显示状态信息的 Label 控件。

图片:50_3710_f778828c2ed64de.gif



    PictureBox 的其它用法
    PictureBox 控件有几种方法使 PictureBox 可用于其它目的。例如:把PictureBox 看作是一块空画布,可以在它上面画画或打印,或者显示文本、图形,甚至是简单的动画。
    Print 方法允许向 PictureBox 控件输出文本,如同向打印机输出一样。有几种字体属性可以控制由 Print 方法输入的文本的特性;Cls 方法可以清除输出。
    Circle、Line、Point 和 Pset 方法可以用于在 PictureBox 中画图形。一些属性如 DrawWidth、FillColor 和 FillStyle 允许自定义图形的外观。
    用 PaintPicture 方法在图片控件内移动 Image 、并在几幅不同的 Image 间
快速变化就能产生动画。
    详细信息 关于 PictureBox 控件的详细信息,请参阅第七章“使用 VisualBasic 的标准控件”。

    轻量图形控件
    Image、Shape 和 Line 控件都被认为是轻量图形控件,也就是说,它们只支持 PictureBox 的属性、方法和事件的一个子集。因此,它们需要较少的系统资源而且加载也比 PictureBox 控件更快。

    用 Image 控件代替 PictureBox
    Image 控件与 PictureBox 控件相似,但它只用于显示图片。它不能作为其它控件的容器,也不支持 PictureBox 的高级方法。    图片加载于 Image 控件的方法和它们加载于 PictureBox 中的方法一样。设计时,将 Picture 属性设置为文件名和路径,运行时,利用 Loadpicture 函数。
    Image 控件调整大小的行为与 PictureBox 不同。它具有 Stretch 属性,而PictureBox 具有 AutoSize 属性。将 AutoSize 属性设为 True 可使PictureBox 根据图片调整大小,设为 False 则图片将被剪切(只有一部分图片可见)。Stretch 属性设为 False(缺省值)时,Image 控件可根据图片调整大小。将 Stretch 属性设为 True 将根据 Image 控件的大小来调整图
片的大小,这可能使图片变形。
    详细信息 关于 Image 控件的详细信息,请参阅第七章“使用 Visual Basic's的标准控件”。

    使用 Image 控件创建自己的按钮
    Image 控件也可以识别 Click 事件,因此可在要用 CommandButton 的任何地方使用该控件。这种方法可以方便地建立有图片的按钮来取代标题。将几个 Image 控件组成一组,水平置于屏幕顶端(通常在一个 PictureBox中),可以在应用程序中建立一个 ToolBar。
    例如,对 Test Buttons一 例给出的 Image 控件 ,用户可以像选择CommandButton 一样来选择它。窗体第一次被显示时,控件显示 VisualBasic 的图标库中三个交通图标中的一个。每单击 Image 控件一次,就显示一个不同的图标(该例的工作版本,请参阅 Controls.vbp 示例应用程序中的 Button.frm)。
    如果设计时观察一下窗体,就会发现它实际包含所有三个图标,它们堆集在一起。改变顶部 Image 控件的 Visible 属性为 False,下一幅图像(如果其 Visible 属性为真)将显示于顶部。
    图 3.17 为一个交通图标的 Image 控件 (Trffc10a.ico)。

图片:50_3710_34dd68b6d1bd953.gif


    要在 Image 控件的周围建立一个边框,将 BorderStyle 属性设为 1—— 固定的单边框。
    注意 与 CommandButton 不同,单击 Image 控件时,并不显示它被按下的动作。也就是说除非在 MouseDown 事件中改变位图,否则“按钮”正在被按下对用户来说是看不到的。
    详细信息 关于在 Image 控件中显示图形图像的详细信息,请参阅第七章“使用 Visual Basic 的标准控件”。

    使用 Shape 控件和 Line 控件
    Shape 和 Line 控件可用来在窗体表面画图形元素。这些控件不支持任何事件,只用于表面装饰。
    有几种属性可以控制 Shape 控件的外观。通过设置 Shape 属性,Shape 控件可显示为矩形、正方形、椭圆型、圆角矩形或圆角正方形。设置 BorderColor和 FillColor 属性可以改变颜色,BorderStyle、BorderWidth、FillStyle 和DrawMode 属性控制如何画图。    Line 控件与 Shape 控件相似,但仅用于画线。
    详细信息 关于 Shape 和 Line 控件的附加信息,请参阅第七章“使用Visual Basic 的标准控件”。

    Images 应用程序
    图 3.18 所示窗体用了四个 Image 控件,一个 Shape 控件,一个 PictureBox控件和一个 CommandButton 控件。当用户选择扑克牌符号时,Shape 控件使该符号突出显示,并且在 PictureBox 中显示相应的描述。关于本例的工作版本,请参阅 Controls.vbp 示例应用程序中的 Images .frm。

图片:50_3710_f9db089d846e7b5.gif


    下表列出了应用程序中对象的属性设置。
    

图片:50_3710_8a84a0669c87915.gif



   Images 应用程序中的事件

    Image 应用程序对事件的响应如下:
    1.每一个 Image 控件的 Click 事件使 Shape 控件的 Left 属性与它自己的 Left 属性相同,并将图形移到 Image 的顶端。
    2.调用 PictureBox 的 Cls 方法清除 StatusBar 的当前标题。
    3.调用 PictureBox 的 Print 方法在 StatusBar 上打印新标题。
    Image 控件 Click 事件的代码如下:
    Private Sub imgHeart_Click()
     shpCard.Left = imgClub.LeftpicStatus.Cls
     picStatus.Print "Selected: Club"
     shpCard.Visible = True
    End Sub
    注意,Click 事件代码中第一行利用 = 操作符为 Shape 控件的 Left 属性赋一个值 (让它等于 Image 控件的 Left 属性)。下面两行调用方法,因而不需要操作符。在第三行中,值 ("Selected: Club") 是 Print 方法的一个参数。
    该应用代码中还有一行很重要;它在 Form Load 事件中。
    shpCard.Visible = False
    将 Shape 控件的 Visible 属性设为 False,Shape 控件被隐藏起来直至单击第一幅 Image。
    在 Image 控件 Click 事件的最后一步将 Visible 属性设为True。
    详细信息 关于属性、方法和事件详细信息,请参阅第五章“编程基础”。

附加控件
    Visual Basic 工具箱还包含几个其它的标准控件。有些控件可用来处理外部数据库中的大量数据。有些控件可用来访问 Windows 文件系统。还有其它一些控件难以分类,但却十分有用。
    在 Visual Basic 应用程序中还可使用 ActiveX 控件,以前称为自定义控件或 OLE 控件,用法与使用标准控件一样。Visual Basic 的专业版和企业版中的若干 ActiveX 事件同样具有创建自定义控件的功能。可以想像,加上大量厂商制作的附加 ActiveX 控件,几乎可以完成任何工作。
    详细信息 关于使用 ActiveX 控件的详细信息,请参阅第四章“工程的管理”。
    
    数据访问控件
    现代商业中,大多数信息存放于一个或多个中央数据库中 。 Visual Basic 提供了多种数据访问控件,可以访问多数流行的数据库,如 Microsoft Access和 SQL 服务器。
    1.ADO Data 控件用来连接数据库。可把它看成是数据库与窗体中其它控件之间的一个管道线。Data 控件的属性、方法和事件允许从应用程序内部定位和处理外部数据。
    2.DataList 控件与 ListBox 控件相似。DataList 控件与ADO Data 控件一起使用时,它将自动被来自外部数据库某一字段的数据清单填充。
    3.DataCombo 控件如同 DBList 和 TextBox 的组合。TextBox 区域内选中的文本可以编辑,变更出现在底层数据库中。
    4.DataGrid 控件显示在网格或表中的数据。与ADO Data 控件一起使用时,它显示来自于外部数据库多个字段的完全可编辑数据。
    5.Microsoft Hierarchical FlexGrid 控件是唯一能显示数据的多个视图的控件。可把它看作网格和树或大纲控件的组合。运行时,用户可重新安排行和列以提供数据的不同视图。
    详细信息 关于 Data 控件的详细信息,请参阅第七章“使用 Visual Basic 的标准控件”。

    文件系统控件
    Visual Basic 提供三个控件以增加应用程序中的文件处理能力。通常,这些控件在一起使用以查看驱动器、目录和文件。有一些特殊的属性和事件使它们相互联系。
     DriveListBox 控件看起来像 ComboBox 。它提供下拉式驱动器清单,用户可以从中作出选择。
     DirListBox 与 ListBox 控件相似,但它具有显示当前所选驱动器目录清单的内置能力。
     FileListBox 控件看起来像显示所选目录的文件名清单的 ListBox。
    注意 这些控件主要是为在早期 Visual Basic 版本中创建的应用程序的向下兼容性而提供的。CommonDialog 控件提供处理文件访问的简单方法。关于 CommonDialog 控件的详细信息,请参阅本章后面的“其它控件”。

    其它控件
    Visual Basic 还提供了其它几个标准控件。每个控件都服务于唯一的目的。
     Timer 控件可以在应用中以重复时间间隔产生一个事件。这对不需要与用户交互的代码的执行非常有用。
     OLE 容器控件很容易为应用程序增加链接和嵌入等功能。通过 OLE 容器控件,可以提供对任何 OLE——可用的应用程序(如 Microsoft Excel、Word 和其它许多应用程序)的功能的访问,。
     CommonDialog 控件在应用程序中增加内置对话框 ,用来选择文件、颜色、字体和打印函数。
    详细信息 关于标准控件的附加信息,请参阅第七章“使用 Visual Basic 的标准控件”。

焦点概述
    焦点是接收用户鼠标或键盘输入的能力。当对象具有焦点时,可接收用户的输入。在 Microsoft Windows 界面,任一时刻可运行几个应用程序,但只有具有焦点的应用程序才有活动标题栏,才能接受用户输入。在有几个TextBox 的 Visual Basic 窗体中,只有具有焦点的 TextBox 才显示由键盘输入的文本。
    当对象得到或失去焦点时,会产生 GotFocus 或 LostFocus 事件。窗体和多数控件支持这些事件。

图片:50_3710_d2d6ce87d6383b6.gif


    下列方法可以将焦点赋给对象。
     运行时选择对象。
     运行时用快捷键选择对象。
     在代码中用 SetFocus 方法。
     有些对象,它是否具有焦点是可以看出来的。例如,当命令按钮具有焦点时,标题周围的边框将突出显示(见图 3.19)。
    只有当对象的 Enabled 和 Visible 属性为 True 时,它才能接收焦点。Enabled 属性允许对象响应由用户产生的事件,如键盘和鼠标事件。Visible属性决定了对象在屏幕上是否可见。

图片:50_3710_bb48bc0dcf44ee8.gif


    注意 只有不包含任何可接收焦点的控件的窗体,才能接收焦点。

    控件的 Validate 事件
    控件也有一个 Validate 事件,在控件失去焦点前发生。然而,仅当即将接受焦点的控件的 CausesValidation 属性设置为 True 时该事件发生。在许多情况下,由于Validate 事件发生在失去焦点之前,因此对数据验证来说它比 LostFocus 事件更适用。详细信息,请参阅第七章“使用 Visual Basic 标准控件”中的“通过限制焦点验证控件数据”。
    
    不能接受焦点的控件
    有些控件,例如轻量控件,不能接受焦点。轻量控件包含下面的控件:
     Frame 控件
     Image 控件
     Label 控件
     Line 控件
     Shape 控件
    此外,运行时不可见的控件,如 Timer 控件,不能接受焦点。

设置 Tab 键顺序

    例如,假设您建立了两个名称为 Text1 和 Text2 的 TextBox,然后又建立了一个名称为 Commandl 的 CommandButton。应用程序启动时,Text1 具有焦点。按 TAB 键将使焦点按控件建立的顺序在控件间移动,如图 3.20 所示。
    设置 TabIndex 属性将改变一个控件的 tab 键顺序。 控件的 TabIndex 属性决定了它在 tab 键顺序中的位置。按照缺省规定,第一个建立的控件其TabIndex 值为 0,第二个的 TabIndex 值为 1,以此类推。当改变了一个控件的 tab 键顺序位置,Visual 自动为其它控件的 tab 键顺序位置重新编号,以反映插入和删除。例如,要使 Command1 变为 tab 键顺序中的首位,其它控件的 TabIndex 值将自动向上调整,如下表所示。

图片:50_3710_fc7cec9717b09bb.gif


    因为编号从0开始,TabIndex的最大值总是比tab键顺序中控件的数目少 1。即使TabIndex属性值高于控件数目,Visual Basic也会将这个值转换为控件数减一。

图片:50_3710_ab107855ee6ed36.gif


    注意 不能获得焦点的控件以及无效的和不可见的控件不具有 TabIndex 属性,因而不包含在 tab 键顺序中。按 TAB 键时,这些控件将被跳过。

    在 Tab 键顺序中删除控件
    通常,运行时按 TAB 键能选择 tab 键顺序中的每一控件。将控件的TabStop 属性设为 False (0) ,便可将此控件从 tab 键顺序中删除。
    TabStop 属性已置为 False 的控件,仍然保持它在实际 tab 键顺序中的位置,只不过在按 tab 键时这个控件被跳过。
    注意 一个 OptionButton 组只有一个 tab 站。选中的按钮(即 Value 值 为True 的按钮)的 TabStop 属性自动设为 True,而其它按钮的 TabStop属性为 False。

    菜单基础
    如果应用程序要为用户提供一组命令,菜单提供一种方便的给命令分组的方法,并使用户容易访问这些命令。
    图 3.21 举例说明了无标题窗体的菜单界面元素。

图片:50_3710_0ad38c5e12d41d1.gif


    菜单栏立即出现在窗体的标题栏下面,并包含一个或多个菜单标题。当单击一个菜单标题(如“文件”),包含菜单项目的列表就被拉下来。菜单项可以包括命令(如“新建”和“退出”)、分隔条和子菜单标题。用户看到的每个菜单项和在“菜单编辑器”中定义的一个菜单控件对应(“菜单编辑器”将在本章后面讨论)。
    要使您的应用程序简单好用,应该将菜单项按其功能分组。例如,图 3.21 中与文件有关的命令“新建”,“打开”,和“另存为”都列入“文件”菜单。有些菜单项目直接执行动作,如“文件”菜单中的“退出”菜单项将关闭应用程序。其它菜单项显示一个对话框,即要求用户提供应用程序执行动作所需信息的窗口。应该在这些菜单项后加上省略符 (...)。例如,当从“文件”菜单中选择“另存为...时”,出现“文件另存为”对话框。
    菜单控件是一个对象;与其它对象一样,它具有定义它的外观与行为的属性。在设计或运行时可以设置 Caption 属性、Enabled 和 Visible 属性、Checked 属性以及其它属性。菜单控件只包含一个事件,即 Click 事件,当用鼠标或键盘选中该菜单控件时,将调用该事件。
    详细信息 关于菜单控件的详细信息,请参阅第六章“创建用户界面”中的“用菜单编辑器创建菜单”。

    弹出式菜单
    弹出式菜单是显示于窗体之上,独立于菜单栏的浮动式菜单,如图 3.22 所示。显示在弹出式菜单上的项取决于鼠标右键按下时指针的位置,因此,弹出式菜单又称为上下文菜单(在 Windows 95 中,击鼠标右键可激活上下文菜单。)应该用弹出式菜单提供一种访问公共的上下文命令的高效方法。例如,用鼠标右键单击一个 TextBox,将会出现一个上下文菜单(如图 3.22 所示)。

图片:50_3710_c11471a89ccb35a.gif


    任何至少有一个菜单项的菜单,运行时都可以显示为弹出式菜单。使用PopupMenu 方法可显示弹出式菜单。
    详细信息 关于弹出式菜单的详细信息,请参阅第六章“创建用户界面”中的“用菜单编辑器创建菜单”。

    使用菜单编辑器
    使用“菜单编辑器”,可向现存的菜单中增加新命令、用自己的命令替代现存的菜单命令、产生新的菜单和菜单栏,改变和删除现存菜单和菜单栏。“菜单编辑器”的主要优点是使用方便。可以在只用很少编程的全交互方式中自定义菜单。
    要显示“菜单编辑器”,请
     在“工具”菜单中选择“菜单编辑器这将打开“菜单编辑器”,如图 3.23 所示

图片:50_3710_0b56c6ff2c49de3.gif


    大多数菜单控件属性可用“菜单编辑器”设置,同样,所有的菜单属性也可以在“属性”窗口中得到。通常,在“菜单编辑器”中建立菜单,但要快速改变单个属性,一般使用“属性”窗口。
    详细信息 关于创建菜单和使用“菜单编辑器”的详细信息,请参阅第六章“创建用户界面”中的“用菜单编辑器创建菜单”。

    用对话框提示用户
    在基于 Windows 的应用程序中,对话框被用来提示用户提供应用程序继续运行所需的数据或者向用户显示信息。对话框是一种特殊类型的窗体对象,可用以下三种方法之一建立:
     使用 MsgBox 或 InputBox 函数的代码可以创建预定义对话框。
     使用标准窗体或自定义已存在的对话框创建自定义对话框。
     使用 CommonDialog 控件可创建标准对话框,如“打印”和“打开文件”。
    图 3.24 是利用 MsgBox 函数创建预定义对话框的例子。

图片:50_3710_79f990442c0f8c0.gif


    当在代码中调用 MsgBox 函数时,该对话框被显示。代码如下:
    MsgBox "Error encountered while trying to open file," ; vbCrLf ; "pleaseretry.", vbExclamation, "Text Editor"
    需要给 MsgBox 函数提供三条信息或三个参数:消息文本、决定对话框类型的常数(numeric 值)和标题。由于样式可以使用按钮和图标的各种各样组合,所以创建对话框更加容易。
    由于大多数对话框需要用户的交互作用,所以通常显示为模态对话框。在继续使用应用程序的其它部分以前,必须关闭(隐藏或卸载)模态对话框。例如,若在切换到其它窗体或其它对话框前必须单击“确定”或者“取消”,那么这个对话框就是模态对话框。
    非模态对话框不需要关闭就可以使焦点在该对话框和其它窗体之间移动。对话框显示时,可以在当前应用程序的其它地方继续工作。非模态对话框很少;通常因为应用程序继续前需要响应才显示对话框。Visual Basic 中“编辑”菜单的“查找”对话框就是一个非模态对话框。使用非模态对话框显示常用的命令或信息。
    详细信息 关于创建对话框的详细信息,请参阅第六章“创建用户界面”。



喜欢0 评分0
游客

返回顶部