VB中的数组

5.1数组的概念

1引例

  求100个学生的平均成绩及超过平均成绩的人数。

  如果用一般变量来表示成绩,需要用100个变量,如:mark1mary2、……mark100。若用数组,可以只用一个来表示mark1

To
 100)。

2基本概念

  数组:是同类型变量的一个有序的集合。

   如:A1 To 100),表示一个包含100个数组元素的名为A的数组。

  数组元素即数组中的变量。用下标表示数组中的各个元素。

 表示方法:数组名P1P2,……)

   其中P1P2表示元素在数组中的排列位置,称为“下标”。

 如:A32)代表二维数组A中第3行第2列上的那个元素。

  数组维数由数组元素中下标的个数决定,一个下标表示一维数组,二个下标表示二维数组。

  VB中有一维数组、二维数组、……最多60维数组。

  下标:下标表示顺序号,每个数组有一个唯一的顺序号,下标不能超过数组声明时的上、下界范围。下标可以是整型的常数、变量、表达式,甚至又是一个数组元素。

     下标的取值范围是:下界To上界,缺省下界时,系统默认取0

3数组声明

 数组必须先声明后使用。声明数组就是让系统在内存中分配一个连续的区域,用来存储数组元素。

 声明内容数组名、类型、维数、数组大小

      一般情况下,数组中各元素类型必须相同,但若数组为Variant时,可包含不同类型的数据。

 静态数组:声明时确定了大小的数组。

 动态数组:声明时没有给定数组大小(省略了括号中的下标),使用时需要用ReDim语句重新指出其大小。

使用动态数组的优点是根据用户需要,有效地利用存储空间,它是在程序执行到ReDim语句时才分配存储单元,而静态数组是在程序编译时分配存储单元。

5.2静态数组及声明

1一维数组

静态一维数组的声明形式:

Dim数组名(下标)[As类型]

说明:1)下标必须为常数,不可以为表达式或变量;
   2)下标下界最小为-32768,最大上界为32767;省略下界,其默认值为0,一维数组的大小为:上界-下界+1
   3如果省略类型,则为变体型

: (1Dim A10As Integer
     声明了A是数组名、整型、一维数组、有11个元素,下标的范围是010
  2Dim B-3 To 5As String*3
     声明了B是数组名、字符串型、一维数组、有9个元素,下标的范围是-35,每个元素最多存放3个字符。

2多维数组

  静态多维数组的声明形式:
  
Dim数组名(下标1[,下标2][As类型]

  说明: (1)下标个数决定数组的维数,最多60维。
     2)每一维的大小=上界-下界+1;数组的大小=每一维大小的乘积。

  例Dim C-1 To 54As Long
   声明了C是数组名、长整型、二维数组、第一维下标范围为-15,第二维下标的范围是04,占据7x 5个长整型变量的空间。

3注意事项

  (1)在有些语言中,下界一般从1开始,为了便于使用,在VB的窗体层或标准模块层用Option Base n语句可重新设定数组的下界,如Option Base 1
 2)在数组声明中的下标关系到每一维的大小,是数组说明符,而在程序其他地方出现的下标为数组元素,两者写法相同,但意义不同。
 3)在数组声明时的下标只能是常数,而在其他地方出现的数组元素的下标可以是变量。

5.3动态数组及声明

1动态数组的建立与声明

  建立动态数组的方法是:利用DimPrivatePublic语句声明括号内为空的数组,然后在过程中用ReDim语句指明该数组的大小。语法是:
 ReDim数组名(下标1[,下标2][As类型]
 
其中下标可以是常量,也可以是有了确定值的变量,类型可以省略,若不省略,必须与Dim中的声明语句保持一致。

  例:Dim DAs Single
    SubForm_Load
     ……

    ReDimD46
    ……
    
End Sub

2注意事项

  (1)在动态数组ReDim语句中的下标可以是常量,也可以是有了确定值的变量;
  (
2)在过程中可以多次使用ReDim来改变数组的大小,也可改变数组的维数。
  (
3)每次使用ReDim语句都会使原来数组中的值丢失,可以在ReDim语句后加Preserve参数来保留数组中的数据,但使用Preserve只能改变最后一维的大小,前面几维大小不能改变。

3动态数组使用示例

5.4数组的基本操作

1给数组元素赋初值

  (1)利用循环结构

    例:Dim iA(1 To 10) As Integer
      Fori=1 To 10
         A(i)=0
       Nexti

  (2)利用Array函数

    例:Dim a As Variant,b As Variant,i%
       a = Array (1,2,3,4,5)
        b = Array ("abc","def","67")
      
Fori=0 ToUbound(a)
            Picture1.print a(i);"";
          Nexti
          Fori=0 ToUbound(b)
            Picture1.print b(i);"";
            Nexti

2数组的输入

 (1)通过InputBox函数输入适合输入少量数据。

   例:Dim sB(3,4) As singer
      Fori=0 To 3
      For j=0 To 4
       SB(i,j) =InputBox("输入" &i& j & "的值")
       Next j
       Nexti

 (2)通过文本框控件输入

  对大批量的数据输入,采用文本框和函数split()\join()进行处理,效率更高。

3数组的赋值

 在VB6.0中可以直接将一个数组的值赋值给另一个数组:
   Dim a(3) as integer,b() as integer
   A(0)=2: A(1)=5: A(2)=-2: A(3)=2
   b=a

 在早期的VB中,这需要用循环语句才可以实现:
  ReDimb(UBound(a))
   For I=0 toUBound(a)
     b(I)=a(I)
    Nexti

注意:(1)赋值号两边的数据类型必须一致;
    2)如果赋值号左边的是一个动态数组,则赋值时系统自动将动态数组ReDim成右边相同大小的数组;
    3)如果赋值号左边的是一个大小固定的数组,则数组赋值出错。

4数组的输出

  用For……Next循环语句输出。

5求数组中最大元素和所在下标及各元素之

  求数组中最大元素及下标,一般假设第一个元素及下标为最大,然后将该数与数组中的其他元素逐一比较,若有比其大的就替换,同时替换下标。

6交换数组中各元素

  交换的要求是将数组第一个元素与最后一个交换,第二个与倒数第二个交换,依次类推。

5.5控件数组

1控件数组的概念

  控件数组是由一组相同类型的控件组成的,它们共用一个控件名,具有相同的数组。控件数组适用于若干个控件执行的操作相似的场合,控件组共享同样的事件过程。控件数组通过索引号(属性中的Index)来标识各控件,第一个下标是0。如:Text1(0)Text1(1)Text1(2)Text1(3)……

2控件数组的建立

1)在设计时建立
  步骤:1在窗体上画出某控件,并进行属性设置
     2选中该控件进行“复制”和“粘贴”操作,系统提示“是否建立控件数组”,选择是即可。多次粘贴就可以创建多个控件元素。
     3进行事件过程的编程。

2)运行时添加控件数组

  方法:1在窗体上画出某控件,设置该控件的Index值为0,表示该控件为数组。
     
2在编程时通过Load方法添加其余若干个元素,也可以通过Unload删除某个添加的元素。
     
3每个添加的控件数组通过LeftTop属性,确定其在窗体上的位置,并将Visible设置为True

  使用示例:建立一个类似国际象棋的棋盘,要求黑白交替,运行时单击某个棋格,会改变颜色并显示其序号。

5.6自定义数据类型

1.自定义数据类型的定义

   是指由若干标准数据类型组成的一种复合类型,也称为记录类型。

1)定义方式:

  Type自定义类型名
    元素名[(下标)] As类型名
     ……
    元素名[(下标)]As类型名
 
End Type

   元素名:表示自定义类型中的一个成员
   下标(可选):表示是数组,
   类型名:为标准类型

  例:定义一个学生信息的自定义类型:
   
Typestudtype
     NoAs Integer
'定义学号
     
Name As String*10'定义姓名
   
  Sex As String*2'定义性别
   
  Mark(1 TO 4) As Single'定义4门课程的成绩
     
Total As Single'定义总分
   
End Type

2)注意事项

  1自定义类型一般在标准模块(.bas)中定义,默认是Public
  2自定义类型中的元素可以是字符串,但应是定长字符串
  3)不可把自定义类型名与该类型的变量名混淆
 4)注意自定义类型变量与数组的差别:它们都由若干元素组成,前者的元素代表不同性质、不同类型的数据,以元素名表示不同的元素;后者存放的是同种性质、同种类型的数据,以下标表示不同元素。

2.自定义型变量的声明和使用

   使用形式:Dim变量名 As自定义类型名
  
例如:Dim student Asstudtype,mystudAsstudtype
 
 自定义类型中元素的表示方法是:变量名.元素名如:student.namestudent.mark(4)
  
为了简单起见,可以用
With……End With语句进行简化。例:
   With student
     .no=99001
     .name=""
     .sex=""
     .total=0
      for I=1 to 4

    .mark(I)=int(rnd*101)'随机产生0 - 100之间的分数
     .total=.total+.may(I)
    next I
    End With
   
Mystud=student'同种自定义类型变量可以直接赋值

3.自定义类型数组的使用

   自定义类型数组就是数组中的每个元素都是自定义类型。
   例如:自定义一个由学生姓名、成绩组成的学生记录类型,用来存放
100个学生的记录。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强制返回为文本 -------------------------------- 数字类型的格式化 --------------------------------     固定格式参数:     General Number 普通数字,如可以用来去掉千位分隔号     format$("100,1
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办法, Format 或者FormatDateTime 竟然结果和系统设置的区域语言的日期和时间格式相关。意思是尽管你用诸如 Format(Now, "MM/dd/yyyy"),如果系统的设置格式区域语言的日期和时间格式分隔符是"-",那他还会显示为 MM-dd-yyyy     只有拼凑: <%response.write
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace My ‘全局错误处理,新的解决方案直接添加本ApplicationEvents.vb 到工程即可 ‘添加后还需要一个From用来显示错误。如果到这步还不会则需要先打好基础啦 ‘======================================================== ‘以下事件
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,看来我以前没有认真去找这个方法呀。 https://blog.csdn.net/chzjxgd/article/details/6176325 金蝶K3 BOS的插件官方是用VB6编写的,如果  能用.Net下的语言工具开发BOS插件是一件很愉快的事情,其中缘由不言而喻,而本文则是个人首创,实现在了用V
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m As Range, tmpStr As String, s As String Dim x As Integer, y As Integer, subStr As String If MsgBox("确定要分列处理吗?请确定分列的数据会覆盖它后面的单元格!", _
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single) 2 Dim path As String, hash As String 3 For Each fil
  Imports MySql.Data.MySqlClient Public Class Form1 ‘ GLOBAL DECLARATIONS Dim conString As String = "Server=localhost;Database=net2;Uid=root;Pwd=123456;" Dim con As New MySqlConnection
‘導入命名空間 Imports ADODB Imports Microsoft.Office.Interop   Private Sub A1() Dim Sql As String Dim Cnn As New ADODB.Connection Dim Rs As New ADODB.Recordset Dim S As String   S = "Provider=OraOLEDB.Oracl
Imports System.IO Imports System.Threading Imports System.Diagnostics Public Class Form1 Dim A(254) As String    Function ping(ByVal IP As Integer) As String Dim IPAddress As String IPAddress = "10.0.
VB运行EXE程序,并等待其运行结束 参考:https://blog.csdn.net/useway/article/details/5494084 Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Pr
今天碰到一个问题,登陆的时候,如果不需要验证手机号为空,则不去验证手机号 因为登陆的时候所有的验证信息都存放在一个数组里 Dim CheckUserInfo() As String ={UserBirthday, SecEmail, UserMob, UserSex, RealNameFirst, RealName, CheckCardID, CheckCardType, Contactemail
在VB6.0中,数据访问接口有三种: 1、ActiveX数据对象(ADO) 2、远程数据对象(RDO) 3、数据访问对象(DAO) 1.使用ADO(ActiveX Data Objec,ActiveX数据对象)连接SQL Server 1)使用ADO控件连接 使用ADO控件的ConnectionString属性就可以连接SQL Server,该属性包含一个由分号分隔的argument=value语
注:大家如果没有VB6.0的安装文件,可自行百度一下下载,一般文件大小在200M左右的均为完整版的软件,可以使用。   特别提示:安装此软件的时候最好退出360杀毒软件(包括360安全卫士,电脑管家等,如果电脑上有这些软件的话),因为现如今的360杀毒软件直接会对VB6.0软件误报,这样的话就可能会在安装过程中被误报阻止而导致安装失败,或者是安装后缺乏很多必须的组件(其它的杀毒软件或安全卫士之类的
Private Sub Form_Load() Call conndb End Sub Private Function conndb() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim strCn, sql As String Dim db_host As String Dim db_user As String
  PPSM06S70:  Add  moddate  EDITSPRINTJOB:  MAX(TO_CHAR(ETRN.MODDATE, ‘yyyy/mm/dd/HH24:MI AM‘)) ACTUAL_SHIPDATE   4.Test Scenario (1) :Query SQL Test DN:8016578337 SELECT CTRN.TKCTID TRUCK_ID,        
  沒有出現CrystalReportViewer時,須安裝CRforVS_13_0. 新增1個數據集,新增1個數據表,添加二列,列名要和資料庫名一樣. 修改目標Framework 修改app.config, <startup >改成<startup useLegacyV2RuntimeActivationPolicy ="true">  CrystalReport1.rpt增加數據庫專家 在表單
Imports System.Threading Imports System Public Class Form1 Dim th1, th2 As Thread Public Sub Method1() Dim i As Integer For i = 1 To 100 If Me.Label1.BackColor =
Friend Const PROCESS_ALL_ACCESS = &H1F0FFF = 2035711 Friend Const PROCESS_VM_READ = &H10 Friend Const PROCESS_VM_WRITE = &H20 Friend Const PAGE_READONLY = &H2 Friend Const PAGE_READWRITE = &H4 Friend
以下代码随手写的 并没有大量测试 效率也有待提升 如果需要C#的请自行转换 Function SplitBytes(Data As Byte(), Delimiter As Byte()) As List(Of Byte()) Dim i = 0 Dim List As New List(Of Byte()) Dim bytes As New
Imports System.Data.SqlClient Public Class Form1 REM Public conn1 As SqlConnection = New SqlConnection("server=.; Integrated Security=False;Initial Catalog= mydatabase1; User ID= sa;password")