在学习VB.net过程中遇到的一些问题及解决方案的总结(小菜鸟版)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gkxg001/article/details/50583641

搞了三个月的VB.net,介绍一下我的环境吧,用的VS2008编译器,运行坏境是WINCE7.0系统,不要问我为什么不选更优的编译器,这是公司比较老的一款产品,但是也需要维护的,所以。。。。。

大体说说身为菜鸟的我的学习方法吧,本人电气出身,只会点嵌入式的东东,对这个VS确实不太懂,但公司需要,我又只是一块砖,所以,,,,硬着头皮上了,首先,在网上找了个大体介绍这门语言的,好久前好像是传过,新手可以看看,老鸟就可以直接飞过了,以下的内容也可以忽略,本人是小菜鸟一枚,,,,

以下内容部分来自网络,是在学习过程中求助后得到的一些解决方法,在此仅为自身记录分享。

1、ReDim 语句 在过程级别中使用,用于为动态数组变量重新分配存储空间。

  语法 ReDim [Preserve] varname(subscripts) [As type] [, varname(subscripts) [As type]]

  ReDim 语句的语法包括以下几个部分:

(1)、描述 Preserve 可选的。关键字,当改变原有数组最末维的大小时,使用此关键字可以保持数组中原来的数据。

(2)、varname 必需的。变量的名称;遵循标准的变量命名约定。

(3)、subscripts 必需的。数组变量的维数;最多可以定义 60 维的多维数组。subscripts 参数使用下面的语法: [lower To] upper [,[lower To] upper] . . . 如果不显式指定 lower,则数组的下界由 Option Base 语句控制。如果没有 Option Base 语句则下界为 0。

(4)、type 可选的。变量的数据类型;可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(对变长的字符串)、String * length(对定长的字符串)、Object、Variant、用户定义类型或对象类型。所声明的每个变量都要有一个单独的 As type 子句。对于包含数组的 Variant 而言,type 描述的是该数组的每个元素的类型,不能将此 Variant 改为其它类型。

2、说明 ReDim 语句用来定义或重定义原来已经用带空圆括号(没有维数下标)的 Private、Public 或 Dim 语句声明过的动态数组的大小。 可以使用 ReDim 语句反复地改变数组的元素以及维数的数目,但是不能在将一个数组定义为某种数据类型之后,再使用 ReDim 将该数组改为其它数据类型,除非是 Variant 所包含的数组。如果该数组确实是包含在某个 Variant 中,且没有使用 Preserve 关键字,则可以使用 As type 子句来改变其元素的类型,但在使用了此关键字的情况下,是不允许改变任何数据类型的。 如果使用了 Preserve 关键字,就只能重定义数组最末维的大小,且根本不能改变维数的数目。例如,如果数组就是一维的,则可以重定义该维的大小,因为它是最末维,也是仅有的一维。不过,如果数组是二维或更多维时,则只有改变其最末维才能同时仍保留数组中的内容。下面的示例介绍了如何在为已有的动态数组增加其最末维大小的同时而不清除其中所含的任何数据。 ReDim X(10, 10, 10) . . . ReDim Preserve X(10, 10, 15) 同样地,在使用 Preserve 时,只能通过改变上界来改变数组的大小;改变下界则会导致错误。 如果将数组改小,则被删除的元素中的数据就会丢失。如果按地址将数组传递给某个过程,那么不要在该过程内重定义该数组的各维的大小。 在初始化变量时,数值变量被初始化为 0,变长的字符串被初始化为一个零长度的字符串 (""),而定长的字符串则用 0 填充。Variant 变量被初始化为 Empty。用户自定义类型的变量的每个元素作为各自独立的变量进行初始化。在使用引用对象的变量之前,必须使用 Set 语句将一个已有的对象赋给该变量。在被赋值之前,所声明的对象变量有一个特定值 Nothing,这个值表示该变量没有指向任何对象的实例。 小心 如果 ReDim 语句所使用的变量在模块级别或过程级别不存在,则该语句就相当于一个声明语句。如果此后在一个更广的范围内又创建了同名的变量,即使使用了 Option Explicit,ReDim 也将使用后声明的这个变量,且不会导致编译错误。为了避免这种冲突,就不应把 ReDim 作为声明语句使用,而只应作为重定义数组大小的语句。 注意 要改变 Variant 所包含的数组的大小,必须在试图改变其数组大小之前显式声明该 Variant 变量。 ReDim 语句示例 该示例使用 ReDim 语句为动态数组变量分配和重分配存储空间。假设 Option Base 是 1。 Dim MyArray() As Integer '声明动态数组。 Redim MyArray(5) '分配 5 个元素。 For I = 1 To 5 '循环 5 次。 MyArray(I) = I '初始化数组。 Next I 下一条语句重定义该数组的大小,并清除其中的元素。 Redim MyArray(10) '大小重定为 10 个元素。 For I = 1 To 10 '循环 10 次。 MyArray(I) = I '初始化数组。 Next I 下面的语句重定义该数组的大小,但没有清除其中的元素。 Redim Preserve MyArray(15) '大小重定为 15 个元素。(以上来自网络)

3、class和module的主要区别:
类和模块,类中的方法可以是静态的,也可以是动态实例的。模块中的东西基本上都是静态的,使用时通常不需要生成一个实例来访问,另外定义的PUBLIC变量应该是全程的。
模块可以使用,但是应该尽量少用,例如仅仅使用 sub Main() 来启动程序而已,通常应该写成类。

模块可以用来分类存放函数、过程和相关变量等,而类当然是用来存放类的代码的,类可以在任何时候用new关键词将其实体化为对象以进行操作。也就类似于vb中的模块和类模块的关系。当你仅仅是为了编写一个全局的过程、函数甚至是常量时,就该用module,而要编写类的时候就必需将代码放在class中。

4、

Mid 函数 返回 Variant (String),其中包含字符串中指定数量的字符。 语法 Mid(string, start[, length]) Mid 函数的语法具有下面的命名参数: 部分 说明 string 必要参数。字符串表达式,从中返回字符。如果 string 包含 Null,将返回 Null。 start 必要参数。为 Long。string 中被取出部分的字符位置。如果 start 超过 string 的字符数,Mid 返回零长度字符串 ("")。 length 可选参数;为 Variant (Long)。要返回的字符数。如果省略或 length 超过文本的字符数(包括 start 处的字符),将返回字符串中从 start 到尾端的所有字符。 说明 欲知 string 的字符数,可用 Len 函数。 注意 MidB 函数作用于字符串中包含的字节数据,如同在双字节字符集(DBCS)语言中一样。因此其参数指定的是字节数,而不是字符数。对于使用 MidB的示例代码,请参阅示例主题中的第二个示例。

2.举例

string类型变量str="123456"

mid(str,2,1)的意思是在str字符串中从第2个字符开始取得一个字符,值为2

注意:与java语法不同是从1开始,而不是从0开始。

5、Mod 运算符: 用来对两个数作除法并且只返回余数。 语法 result = number1 Mod number2 Mod 的语法具有以下几个部分: 部分 描述 result 必需的;任何数值变量。 number1 必需的;任何数值表达式。 number2 必需的;任何数值表达式。 说明 在进行 Mod 运算或求余数运算时,该运算符将 number1 用 number2 除(将浮点数字四舍五入成整数),并把余数作为 result 的值返回。例如,在下列表达式中,A (result) 等于 5。 A = 19 Mod 6.7 一般说来,不管 result 是否为一个整数,result 的数据类型为 Byte,Byte 变体、Integer、Integer 变体、Long 或一个包含 Long 的 Variant。任何小数部分都被删除。但是,如果任何一个 Null,类型的表达式出现时,result 都将是 Null。任何 Empty 类型表达式都作为 0 处理。 Mod 运算符示例 本示例使用 Mod 运算符来对两数作除法运算,但返回其余数而非商数。如果两数中有一数为浮点数,该数会先被四舍五入成整型后再进行运算。 Dim MyResult MyResult = 10 Mod 5 ' 返回 0。 MyResult = 10 Mod 3 ' 返回 1。 MyResult = 12 Mod 4.3 ' 返回 0。 MyResult = 12.6 Mod 5 ' 返回 3。

6、

在VB,net编辑器中使用#region的作用

可以将一段完整的代码用#region和#end region 包围起来,并且在#region后面紧跟着一个注释用的字符串,这样可以方便地把代码折叠起来,使代码简单,一目了然。

7、

CByte ()

返回表达式,此表达式已被转换为 Byte 子类型的 Variant。

描述

返回表达式,此表达式已被转换为 Byte 子类型的 Variant。

语法

CByte(expression)

expression 参数是任意有效的表达式。

说明

通常,可以使用子类型转换函数书写代码,以显示某些操作的结果应被表示为特定的数据类型,而不是默认类型。例如,在出现货币、单精度、双精度或整数运算的情况下,使用 CByte 强制执行字节运算。

CByte 函数用于进行从其他数据类型到 Byte 子类型的的国际公认的格式转换。例如对十进制分隔符(如千分符)的识别,可能取决于系统的区域设置。

如果 expression 在 Byte 子类型可接受的范围之外,则发生错误。

8、

vb.net中类型转换函数

函数名 返回数据类型 expression 参数范围

CBool

Boolean 数据类型 (Visual Basic)

任何有效的 Char、String 或数值表达式。

CByte

Byte 数据类型 (Visual Basic)

0 到 255(无符号);舍入小数部分。1

CChar

Char 数据类型 (Visual Basic)

任何有效的 Char 或 String 表达式;只转换 String 的第一个字符;值可以为 0 到 65535(无符号)。

CDate

Date 数据类型 (Visual Basic)

任何有效的日期和时间表示法。

CDbl

Double 数据类型 (Visual Basic)

负值取值范围为 -1.79769313486231570E+308 到 -4.94065645841246544E-324;正值取值范围为 4.94065645841246544E-324 到 1.79769313486231570E+308。

CDec

Decimal 数据类型 (Visual Basic)

对 于零变比数值,即无小数位数值,为 +/-79,228,162,514,264,337,593,543,950,335。对于具有 28 位小数位的数字,范围是 
+/-7.9228162514264337593543950335。最小的可用非零数是 0.0000000000000000000000000001 (+/-1E-28)。

CInt

Integer 数据类型 (Visual Basic)

-2,147,483,648 到 2,147,483,647;舍入小数部分。1

CLng

Long 数据类型 (Visual Basic)

-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807;舍入小数部分。1

CObj

Object 数据类型

任何有效的表达式。

CSByte

SByte 数据类型 (Visual Basic)

-128 到 127;舍入小数部分。1

CShort

Short 数据类型 (Visual Basic)

-32,768 到 32,767;舍入小数部分。1

CSng

Single 数据类型 (Visual Basic)

负值的取值范围为 -3.402823E+38 到 -1.401298E-45;正值的取值范围为 1.401298E-45 到 3.402823E+38。

CStr

String 数据类型 (Visual Basic)

CStr 的返回值取决于 expression 参数。请参见返回 CStr 函数的值

CUInt

UInteger 数据类型

0 到 4,294,967,295(无符号);舍入小数部分。1

CULng

ULong 数据类型 (Visual Basic)

0 到 18,446,744,073,709,551,615(无符号);舍入小数部分。1

CUShort

UShort 数据类型 (Visual Basic)

0 到 65,535(无符号);舍入小数部分。1

1 小数部分可能要进行称为“四舍六入五成双”的特殊类型舍入。有关更多信息,请参见“备注”。


二、Convert

 备注

通常,在 Convert 类或在独立类型结构或类中,应优先使用 Visual Basic 类型转换函数,其次使用 .NET Framework 方法(例如 ToString())。Visual Basic 函数设计用于优化与 Visual Basic 代码之间的交互,并且这些函数使源代码更简短、更易阅读。另外,.NET Framework 转换方法产生的结果不一定与 Visual Basic 函数产生的结果相同,例如当将 Boolean 转换为 Integer 的时候。有关更多信息,请参见数据类型的疑难解答

行为

  • 强制转换。通常,可以使用数据类型转换函数将运算结果强制转换为某一特定数据类型而非默认数据类型。例如,在通常发生单精度、双精度或整型运算的情况下,使用 CDec 强制执行小数运算。

  • 转换失败。如果传递给函数的 expression 超出要转换成的数据类型的范围,将发生OverflowException

  • 小数部分。将一个非整数值转换为整型时,整数转换函数(CByte、CInt、CLng、CSByte、CShort、CUInt、CULng 和 CUShort)将移除小数部分,并将该值舍入为最接近的整数。

    如果小数部分正好是 0.5,整数转换函数将其舍入为最接近的偶数整数。例如,0.5 舍入为 0,1.5 和 2.5 都舍入为 2。这有时称为“四舍六入五成双”,其目的是弥补在将许多这样的数字相加时可能会累积的偏量。

    CInt 和 CLng 与 Int、Fix 函数 (Visual Basic) 不同,后者截断而不是舍入一个数字的小数部分。此外,Fix 和 Int 总是返回与传入的数据类型相同的值。

  • 日期/时间转换。使用 IsDate 函数 (Visual Basic) 可确定一个值是否可转换为日期和时间。CDate 能够识别日期文本和时间文本,但不能识别数值。若要将 Visual Basic 6.0 Date 值转换为 Visual Basic 2005 Date 值,可以使用 System.DateTime.FromOADate(System.Double) 方法。

  • 中性日期/时间值。 Date 数据类型 (Visual Basic) 始终包含日期和时间信息。为进行类型转换,Visual Basic 将 1/1/0001(公元 1 年 1 月 1 日)作为日期的“中性值”,将 00:00:00(午夜)作为时间的中性值。如果将 Date 值转换为字符串,CStr 的结果字符串中将不包含中性值。例如,如果将 #January 1, 0001 9:30:00# 转换为字符串,结果为“9:30:00 AM”;日期信息被删除了。但是,日期信息仍然保留在原来的 Date 值中,并可以使用 DatePart 函数 (Visual Basic) 等函数进行恢复。

  • 区域差异。涉及字符串的类型转换函数根据应用程序的当前区域设置进行转换。例如,CDate 依据系统的区域设置来识别日期的格式。必须以正确的顺序为区域设置提供日、月、年数据,否则可能无法正确解释日期。系统无法识别包含星期几的字符串(如“Wednesday”)的长日期格式。

    如果需要以区域设置指定的格式之外的格式在值的字符串表示形式之间转换,则不能使用 Visual Basic 类型转换函数。如果进行转换,请使用该值类型的 ToString(IFormatProvider) 方法和 Parse(String, IFormatProvider) 方法。例如,将字符串转换为 Double 时,使用System.Double.Parse(System.String,System.IFormatProvider),将 Double 类型的值转换为字符串时,使用 System.Double.ToString(System.IFormatProvider)

三、CType 函数

CType 函数采用第二个参数 typename,并且将 expression 强制转换为 typename,其中 typename 可以是存在有效转换的任何数据类型、结构、类或接口。

有关 CType 与其他类型转换关键字的比较,请参见 DirectCast 和 TryCast

CBool 示例

下面的示例使用 CBool 函数将表达式转换为 Boolean 值。如果表达式的计算结果为非零值,CBool 将返回True;否则返回 False。

四、

Val 函数

以适当类型的数值形式返回包含于字符串内的数字。

Public Overloads Function Val(ByVal InputStr As String) As Double
' -or-
Public Overloads Function Val(ByVal Expression As Object) As Double
' -or-
Public Overloads Function Val(ByVal Expression As Char) As Integer

参数

Expression, InputStr

必选。任何有效的 String 表达式、Object 变量或 Char 值。如果 Expression 是 Object 类型,它的值必须可以转换为 String,否则,将出现 ArgumentException 错误。

 异常

异常类型 错误号 条件

OverflowException

6

InputStr 太大。

InvalidCastException

13

数字格式错误。

ArgumentException

438

Object 类型表达式不能转换为字符串。

如果正在升级使用非结构化错误处理方式的 Visual Basic 6.0 应用程序,请参见“错误号”一列。(您可以根据Number 属性(Err 对象)比较错误号。)然而,如果可能,应当考虑用 Visual Basic 的结构化异常处理概述替换这种错误控制。

 备注

Val 函数在发现第一个不能将其识别为数字的字符时,将停止读入字符串。那些通常被认为是数值的一部分的符号和字符,例如美元符号与逗号,都不能被识别。但是该函数可以识别基数前缀 &O(八进制)和 &H(十六进制)。空白、制表符和换行符都会从参数中排除。

下面的调用返回值 1615198。

Val(" 1615 198th Street N.E.")

下面的调用返回十进制值 -1。

Val("&HFFFF")
注意

Val 函数只将句点 (.) 识别为有效的小数点分隔符。当使用不同的小数点分隔符时(如在国际应用程序中),则应使用 CDbl 或CInt 将字符串转换为数字。若要将特定区域中的数字的字符串表示形式转换为数值,请使用 Numeric 类型的 Parse(String, IFormatProvider) 方法。例如,将字符串转换为 Double 时,使用System.Double.Parse(System.String,System.IFormatProvider)

五、

在Visual Basic 2005中将加入一个新的运算符——TryCast,相当于C#的as运算符。我一直希望VB有这样一个运算符。VB目前的类型转换运算符主要有 CType和DirectCast。他们的用法几乎一样。我详细比较了一下这两个运算符,得出以下结论:

1、在转换成引用类型时,两者没有什么区别,都是直接调用castclass指令,除非重载了类型转换运算符CType。DirectCast运算符是不能重载的。

2、转换成值类型时,CType会调用VB指定的类型转换函数(如果有的话),比如将String转换为Int32时,就会自动调用 VisualBasic.CompilerServices.IntegerType.FromString,而将Object转换为Int32则会调用 FromObject。其他数值类型转换为Int32时,CType也会调用类型本身的转换方法实施转换。DirectCast运算符则很简单,直接将对 象拆箱成所需类型。

所以在用于值类型时,CType没有DirectCast快速但可以支持更多的转换。在C#中,类型转换则为(type)运算符和as运算符。 (type)运算符的工作方式与VB的DirectCast很相似,也是直接拆箱或castclass的,但是如果遇到支持的类型转换(如long到 int),(type)运算符也会调用相应的转换方法,但不支持从String到int的转换。C#另一个运算符as则更加智能,它只要判断对象的运行实 例能否转成目标类型,然后就可以省略castclass指令,直接按已知类型进行操作,而且编译器还可以自动对as进行优化,比如节省一个对象引用等。所 以在将Object转换成所需的类型时,as是最佳选择。

由于as有很多优点,Visual Basic 2005将这一特性吸收了过来,用TryCast运算符就可以获得和as一样的效果,而且语法与DirectCast或CType一样。

9、Enum :一种自定义枚举数据 Long 类型 Enum 内部的元素可以不赋值,vb 会使用默认数值:首元素为 0,后面一个比前面一个大 1 可以这样: Public Enum InterfaceColors My0 = -1 My1 = 3 My2 = 3 My3 My4 End Enum 则:My0=-1,My1=3,My2=3,My3=4,My4=5 也可以这样: Public Enum InterfaceColors My0 My1 My2 My3 My4 End Enum 则:My0=0,My1=1,My2=2,My3=3,My4=4 在程序中可这样应用: Dim MyColor As InterfaceColors MyColor = My2 If MyColor = My2 Then .....

模块可以认为是受限制的类,它们的所有成员都是共享的,永远不能实例化,不支持继承,不能实现接口。


 

猜你喜欢

转载自blog.csdn.net/gkxg001/article/details/50583641