第一篇:VB中的Dictionary对象介绍+小结
VBA中Dictionary对象使用小结
Dim dict ' 创建Dictionary Set dict = CreateObject(“Scripting.Dictionary”)' 增加项目
dict.Add “A”, 300 dict.Add “B”, 400 dict.Add “C”, 500 ' 统计项目数 n = dict.Count ' 删除项目
dict.Remove(“A”)' 判断字典中是否包含关键字 dict.exists(“B”)' 取关键字对应的值,注意在使用前需要判断是否存在key,否则dict中会多出一条记录 Value = dict.Item(“B”)' 修改关键字对应的值,如不存在则创建新的项目 dict.Item(“B”)= 1000 dict.Item(“D”)= 800 ' 对字典进行循环 k = dict.keys v = dict.Items For i = 0 To dict.Count-1 key = k(i)Value = v(i)MsgBox key & Value Next ' 删除所有项目 dict.Removeall 实例: Sub 宏1()Set dic = CreateObject(“Scripting.Dictionary”)'字典 For i = 1 To 10000 If Not i Like “*4*” Then dic.Add i, “" '如果不包含“1” End If Next Range(”a2“).Resize(dic.Count, 1)= Application.WorksheetFunction.Transpose(dic.keys)'从A2单元开始向下放置 End Sub
VB中的Dictionary对象
核心归纳:
1、更换键名,用obj.key(”xx“)=”newxx“
2、更换键值或访问指定键:
1、重设键值:obj.item(”xx“)=”newxx“,2、取得键值:response.write obj.item(”xx“)=”,如果obj.item(“xx”)=“newxx” 中的KEY键“xx”未设定时,会在对象的后面增加一个键值对。
3、获得条目数:obj.count(从1开始)
4、增加键值对:obj.add key,value
5、移除键:obj.remove(“key”), obj.removeall()
6、判定键是否存在:obj.Exists(“key”)
7、遍历:先把键和值各自赋给一个变量,构成一维数组,再用FOR遍历 a=d.keys b=d.Items 'For x=0 to d.count-1 '或 从上到下遍历,For x=d.Count-1 To 0 Step-1 '从下到上遍历 wan : abc
zuo : 10254
Response.write a(x)
Response.write “ : ”
Response.write b(x)
Response.write “
” Next
8、用obj..CompareMode = 0(二进制,默认,大小写敏感)或obj.CompareMode = 1(文本,大小写不区分,但不会后面的覆盖前面)来指定比较模式,=================== 简单的理解:Scripting.Dictionary对象相当于二维数组,但比二维数组更灵活,可以随时操纵其中某个键,而二维数组还要遍历。
以下用一个简单的案例来帮助理解:
set d=server.CreateObject(“scripting.dictionary”)d.add “zuo”,21312 d.add “wan”,“abc” response.write d.Count '计数,从1开始 Response.write “
” a=d.keys b=d.Items 'For x=0 to d.count-1 '或 从上到下遍历,For x=d.Count-1 To 0 Step-1 '从下到上遍历 wan : abc
zuo : 10254
Response.write a(x)
Response.write “ : ”
Response.write b(x)
Response.write “
” Next Response.write d.item(“wan”)'输出指定的key值 Response.write “
” d.item(“wan”)=“新值” Response.write d.item(“wan”)'输出指定的key值 Response.write “
” d.key(“wan”)=“newwan” '更改键名 'wan键名更改了,是否还有值?
Response.write “执行d.key(”“wan”“)=”“newwan”“后再输出wan” Response.write d.item(“wan”)'无值输出。但要注意: d.item(“wan”)不存在,可用d.Exists(“wan”)检测。Response.write “
输出新名称newwan的值:” Response.write d.item(“newwan”)Response.write “
” Response.write d.Exists(“newwan”)'分析是否存在这个键True。d.Remove(“newwan”)Response.write “
” Response.write d.Exists(“wan”)'分析是否存在这个键True。Response.write “
” For x=d.Count-1 To 0 Step-1 '从下到上遍历 wan : abc
zuo : 10254 Response.write a(x)Response.write “ : ” Response.write b(x)Response.write “
” Next
详细:
许多Microsoft的编程语言,如Visual Basic、VBScript和Jscript,都提供集合(collection)。可以把集合想象为数组,可以使用其中内建的函数完成存储和操纵数据等基本任务。无须担心数据是在哪些行列,而是使用唯一的键进行访问。
VBScript和Jscript都提供类似的对象,通称Scripting.Dictionary对象或Dictionary对象。它类似于二维数组,把键和相关条目的数据存放在一起。然而真正的面向对象的方法,不应直接访问数据条目,必须使用Dictionary对象支持的方法和属性来实现。
创建和使用Dictionary对象
创建一个Dictionary对象的示例如下:
‘In VBScript: Dim objMyData
Set objMyData = Server.CreateObject(“Scripting.Dictionary”)//In Jscript:
var objMyData = Server.CreateObject(„Scripting.Dictionary‟);
Dictionary对象还可用于客户端的IE中。
1. Dictionary对象的成员概要
当增加一个键/条目对时,如果该键已存在;或者删除一个键/条目对时,该关键字/条目对不存在,或改变已包含数据的Dictionary对象的CompareMode,都将产生错误。属 性 说 明
CompareMode(仅用于VBScript)设定或返回键的字符串比较模式
Count 只读。返回Dictionary里的键/条目对的数量---从1开始,而不像数组从0开始计数 Item(key)设定或返回指定的键的值
Key(key)设定键名值
方法说明
Add(key,item)增加键/条目对到Dictionary
Exists(key)如果指定的键存在,返回True,否则返回False Items()返回一个包含Dictionary对象中所有条目的数组
Keys()返回一个包含Dictionary对象中所有键的数组
Remove(key)删除一个指定的键/条目对
RemoveAll()删除全部键/条目对
2. 对Dictionary中增加和删除条目
一旦得到一个新的(空的)Dictionary,可以对其添加条目,从中获取条目以及删除条目:
‘ In VBScript:
objMyData.Add “MyKey”, “MyItem” objMyData.Add “YourKey”, ”YourItem” blnIsThere = objMyData.Exists(“MyKey”)strItem = objMyData.Item(“YourKey”)strItem = objMyData.Remove(“MyKey”)objMyData.RemoveAll 3. 修改键或条目的值
可以通过修改键的值,或通过修改与特定的键关联的条目的数据,来改变存储在Dictionary内的数据。下面的代码改变键为MyKey的条目中的数据。
ObjMyData.Item(“MyKey”)= “NewValue” „ In VBScript ObjMyData.Item(„MyKey‟)= „NewValue‟;// In JScript 如果指定的键在Dictionary未找到,将在Dictionary中后面位置创建一个以MyKey为键,以New Value为其条目值的新的键/条目对。有意思的是,如果使用一个不存在的键来检索条目,不仅得到一个空的字符串(这是可以想到的),而且还在Dictionary里添加一个新的键/条目对,键即是指定的键,但条目的数据为空。
可以使用Key属性仅改变键名的值而不改变与之对应的条目的数据。将一个已存在的键MyKey改变为MyNewKey,可以用:
objMyData.Key(“MyKey”)= “MyNewValue” „ In VBScript objMyData.Item(„MyKey‟)= „MyNewValue‟;// In JScript 如果指定的键未找到,则产生运行期错误。
4. 设置比较模式
Dictionary的CompareMode属性仅适用于VBScript,不能在JScript中使用。当比较字符串键时,允许指定比较的方式。两个允许的值为BinaryCompare(0)和TextCompare(1)。BinaryCompare(0)为二进制数对照(即区分大小写);TextCompare(1)为文本对照(即不区分大小写)。
5. 遍历Dictionary
研究Dictionary时,有两个方法和一个属性需要特别注意,它们允许我们遍历存储在Dictionary里的所有键/条目对。Items方法用一个一维数组的形式返回Dictionary里所有的条目数据,而keys方法用一个一维数组返回所有已存在的键值。可以使用Count属性得到键或条目的数量。
例如,可以使用下列代码得到名称为objMyData的Dictionary中所有的键和条目值。注意,虽然Count属性保存了在Dictionary里的键/条目数量,但VBScript和JScript的数组总是从下标0开始的。因此,数组下标应从0到Count-1。
‘In VBScript:
arrKeys = objMyData.Keys „Get all the keys into an array arrItems = objMyData.Items „Get all the items into an array
For intLoop = 0 To objMyData.Count –1 „Iterate through the array
StrThisKey = arrKeys(intLoop)„This is the key value
StrThisItem = arrItems(intLoop)„This is the item(data)value Next
// In JScript
// Get VB-style arrays using the Keys()and Items()methods var arrKeys = new VBArray(objMyData.Keys()).toArray();var arrItems = new VBArray(objMyData.Items()).toArray();for(intLoop = 0;intLoop < objMyData.Count;intLoop++){ // Iterate through the arrays
strThisKey = arrKeys[intLoop];// This is the key value
strThisItem = arrItems[intLoop];// This is the item(data)value }
在VBScript里也可以使用For Each „ Next语句完成同样的功能:
arrKeys = objMyData.Keys arrItems = objMyData.Items For Each objItem in arrItems
Response.Write objItem & “ = “ & arrItems(objItem)& “
” Next
5.3.2 Dictionary对象示例
本书提供了一系列示例文件可用来试验脚本运行时间库的各种属性。
本章代码的缺省页面提供了一系列可使用的VBScript示例链接。有些示例对JScript同样有效。这些示例存放在Chapter05目录下相应的子目录里,显示的界面如图5-2所示:
要查看Dictionary对象的运行,在菜单页面点击第一个链接,打开名叫show_dictionary.asp的页面。这个页面显示了我们提供的Dictionary对象的内容,允许试验其属性和方法。屏幕如图5-3所示:
1. Dictionary的global.asa文件
随Dictionary对象示例页面提供的文件之一是global.asa。它创建并预先填充了一个会话层作用域的Dictionary对象,因此其内容在页面请求之间不会丢失。一般说来(考虑到可扩展性),这不是一个理想的做法。在这个例子里,可以看到Dictionary的属性和方法的效果。
如果在自己的服务器上下载并安装示例,必须创建一个基于此global.asa文件的虚拟应用程序。或者将其内容添加到缺省站点的根文件夹中的global.asa文件里。在第3章讲述了如何用向导创建虚拟应用程序。然而对于本示例,创建一个虚拟应用程序最简单的方法是在Chapter05示例文件夹内右击dictionary子文件夹,在Properties对话框的Home Directory选项卡里,点击Create按钮,如图5-4所示:
在这个global.asa文件里,代码使用
2. Dictionary示例页面
在“Scripting.Dictionary Object”主页面里,首要的任务是得到一个会话层作用域的Dictionary对象实例的引用。注意,这个引用是一个对象变量,因此必须在VBScript里使用Set关键字。
然后,检查一下是否得到了一个对象(这是个好习惯),如果没有正确地建立包含global.asa文件的虚拟应用程序,检查一下问题出在哪里。你将看到我们自己的消息代替了ASP的错误消息(但是注意,对于这一操作必须关闭缺省的错误处理)。
<%
on error resume next ' turn off error handling to test if object exists 'retrieve Dictionary object from user's session Set objMyData = Session(“MyDictionary”)
If IsObject(objMyData)Then 'found Dictionary object in Session „
%>
第二篇:VB程序设计教学小结
一学期的课程已近尾声,现就一学期以来教学工作及等级考试相关事宜进行归纳: 全国二级VB考试:
1.笔试(公共基础知识部分30分+VB部分70分)
2.机试(基本操作15+15;简单应用20+20;综合应用30分)
关于非VB部分即公共基础知识部分的复习建议:
带资料(电子或纸质)回家,有计划地复习;完成至少 两套笔试试卷(平时购买的+历年考试真题)。
关于笔试中70分VB部分:在网上下载考点,认真复习课本相关知识点,完成相关读程序及重点算法涉及题目(作业中布置的为考试中经常涉及的)。
关于机试部分的复习建议:
将VB题库.rar文件带回家有计划的练习,我认为凡是与考点相关题不要漏做,不能抱侥幸心理。至于考点经常考的操作在平时作业中也有所体现。江苏省二级VB考试:
笔试(20分计算机基础部分+80分VB)机试(改错题+编程题)
感谢大家一学期以来对这门课的支持,对布置作业、改测试题、试卷等工作的支持;感谢各班班干部同学的辛苦付出;感谢大家在课堂上表现出来的活力与热情。最后祝福大家在今后的人生道路上一帆风顺!
第三篇:VB与C语言知识点小结
VB是基于BASIC语言的可视化操作
Dim birthday as string Birthday=inputbox(“输入生日”,”birthday”,”1990-1-3”)Msgbox”您的生日是”&birthday(&是转化成字符串连接输出)点击确定显示弹窗
窗体文字输出print” ”
窗体事件:单击、双击(空白)、load 窗体方法:print方法 xx.print” ” show方法 cls方法 VB的数据类型:数值型、字符串型、日期型、对象型 Dim a as integer Dim b as integer A=text1.text B=text2.text Msg”您输入的和是&val(a)+val(b)输入kk则显示实时错误13,类型不匹配 定义常量:const PI as double =3.1415 Select case opt Case “f”
Result=val(a)+val(b)…
End select 一些运算符+-* / = > < >= <= <>
数学函数:取整函数fix()去掉小数部分,int(a)不大于a的整数 abs(a)绝对值,sqr()求平方根
Sgn()判断正负 log()sin()cos()tan()字符串函数:删除空格trim()删除左端空格ltrim 删除右端空格 rtrim
左截取left(s,6)右截取right(s,6)mid(s,2,6)
测长度:len(a)val()数值转换函数 Lcase()Ucase()大小写转换函数
Instr(a,b)在a中找b,找到了则返回第一次出现的位置,没找到则返回0 随机函数:rand(a)cint(a)把小数的第一位四舍五入 数据类型转换函数:CDBL CLNG CSNG CVAR CSTR Now()所有 date()日期 time()时间 If的三种结构:
1、if _____then __________ Endif
2、if____then _________ Else if ____then ______ Else ____ endif
3、if_____then ______ Else _____ End if Show加载 Visible显示
Select case a Label1.backcolor=RGB(255,0,0)红色 … Case else …
End select RGB(0,255,0)绿色 RGB(0,0,255)蓝色
Do while i<=b S=s+i I=i+1 Loop
For i=a to b step 2 S=s+i Next i 数组
动态数组,静态数组大小固定
与C不同的是,声明数组时规定是是下标上界 dim counter(1)as integer 也可以同时规定上下界 counter(3 to 4)声明变体数组
Dim intx as integer Dim counterA(5)as integer Dim countB(2)as integer 分别赋值
Dim arrx(2)as variant Arrx(1)=counterA()Arrx(2)=counterB()Msgbox arrx(1)(2)声明多维数组
Static matrxA(9,9)as double Static matrxA(1 to 10,1 to 10)as double 可推广
声明动态数组
Dim arr1()空的就是动态
变量作用域:过程中定义的仅过程内部有效
通用区域定义的整个工程有效。窗体内部直接调用。其它窗体要标明源窗体。冒泡排序
For(i=0;i //N-1趟 { } For(j=0;j C语言的基本数据类型: 1、char 字符型 占用1个字节 2、int 整型 反映所在机器中的整数的最自然的长度 8、16、32 限定符:short >=16 long >=32,且short 不得长于int,long不得小于int 3、float 单精度浮点型 4、double 双精度浮点型 5、long double 高精度浮点 这三个的长度都取决于机器。限定符 signed 和unsigned 可以用来限定char 和整型。任何unsigned 类型的数总是正直或者0.„a‟字符常量 “student a”字符串常量 “wangwei””nihao”字符串连接 使用”表示双引号字符 从技术角度看,字符串常量就是字符数组,只是使用了空字符‟ ‟作为字符串的结尾,不算在长度里。 枚举常量:枚举是一个常量整型值的列表。Enum Boolean{NO,YES} 没有显式说明的情况下则值是0,1,2,3,4… 若有部分枚举有值,则其后的值在指定值递增。相对于#define来说,它的优势就是常量值可以自动生成 Typedef enum {…}def Def a 必须是其中的一个值 由&&和||连接的表达式按从左到右的顺序求值,一旦知道结果真假之后立即停止运算。&&比||的优先级高。 优先级从高到底:关系运算符(> >= < <=)相等性运算符 ==!= 逻辑运算符 || && 自增运算符,自减运算符。++--的特殊之处是既可以作为前缀,也可以作为后缀,它们之间不同的地方是,++n代表先增加1,再使用变量的值。n++是先使用变量的值再++。自增自减只能用于变量。 按位运算符:& | 异或^ >> << ~ 其中&用于置0,|用于置1 Break语句用于从for ,while do-while等循环中提前退出,是最内层的循环。 Goto语句,在某些场合goto语句还是用得着的,最常见的用法是终止程序在某些深度嵌套的处理过程,因为break只能跳出最内层的循环。首先主函数也是函数。 变量:全局变量,在所有函数外部定义的外部变量,具有工程可见性 局部变量,在函数内部定义 函数:内部函数,用static定义 外部函数,即具有工程可见性,对整个源程序可见,应该用extern标注。这是默认的 Static的作用: 1、隐藏。编译多个文件的时候,未加static前缀的全局变量和函数具有全局可见性(使用时要在头文件中用extern标注) 2、对于变量有另外的两个作用,保持变量的内容持久,有两种变量存储在静态数据区,一种是外部变量即全局变量,一种是static变量。 3、默认初始化为0 Static的使用法则: 1、若是全局变量尽在单个C文件中访问,则可加static标注,以减少模块之间的耦合度。 2、若全局变量仅由单个函数访问,又想保持其值,可以将其修改为静态局部变量。其实,static可以不用,限定单个文件,不必要,保持其值,局部静态不如全局变量方便,变量可以直接初始化为0。 对于全局变量和外部函数用在工程中的其它文件,在资源接口和头文件中同意使用extern标注,以免出错。 指针是一种保存变量地址的变量。通常是两个字节或者四个字节。用处广泛,原因之一,指针可能是表达某个计算的唯一途径,通常可以生成更高效更紧凑的代码。指针和goto一样,会导致程序难以理解,容易出错。ANSI C制定了操纵指针的明确规则。&取对象的地址 *访问指针指向地址的内容 定义指针 int *ip //ip是指向int类型的指针 一般来说指针指向单变量是不太有意义的。 指针与函数:由于C语言是以传值的方式将参数传递给被调用的函数的,被调用的函数不能修改参数的值,得到的只是副本,如下面一个错误的函数定义,交换两个数的值 Void swap(int x,,int y){ Int temp Temp=x X=y Y=temp } 正确的应该是这样的 Void swap(int *x , int *y){ Int temp Temp=*x *x=*y *y=temp } 指针与数组 数组的名称代表的是数组开始的第一个元素的地址。所以a[i]等同于*(a+i),&a[i]等同于a+I 指向数组的指针也可以这么用:pa[i]也就等同于*(pa+i)。总之指向数组的指针与数组的名称用法是一样的。Int *pa Pa=&a[0] 或者 pa=a Pa++//指向下一个元素 (*pa)++ //将指向的值加1 a=*p++//取值并下移 指针与字符串,其实字符串与数组是一样的,只是有没有结尾符的问题。名字也是指针 字符串也可以通过一个指向其第一个元素的指针访问 Char *pmessage Pmessage= “now is the time ”;注意与其区别 Char amessage[]=”now is the time” Char aname[][15]={” ”,” ”,…} 两个版本的strcpy函数 Void strcpy(char *s ,char *t){ Int I;I=0;While((s[i]=t[i])!=‟ ‟)I++;} Void strcpy(char *s ,char *t){ While((*s=*t)!=‟ ‟){ S++;T++;} } 更有经验的程序员更愿意写成 While((*s++=*t++)!=‟ ‟)进一步简化为 While(*s++=*t++)其它的指针定义: 定义指针数组 Char * lineptr [maxline] Int a[10][20] Int *b[10] A[3][4] b[3][4]都是对象的合法引用,它的一个优点就是每一行的长度可以不同。 (*ptr)[10]定义了一个指向了一个有10个元素数组的指针。即这是一个行指针。多维数组的初始化: Char daytab[2][3]= {{1,2,3},{4,5,6}};二维数组 二维数组以一种晦涩的方式建立在一维数组之上。计算机将二维数组按一维存储(即只有1行)访问时的步长由i和j决定。(i*行长度+j)二维数组传参: 1、当成一维处理 Int a[10][10];Int *b;B=a 那么a[i][j]和b[10*i+j] 声明:f(int *b)传参:f((int *)a) 2、二维仍然当成二维,但必须制定步长(即有多少列),一维可省略,当然也可以不省略 Char word[5][10] 声明:Wordsort(char p[ ][10],int rowsize);传参:Wordsort(word ,5) 3、利用行指针传参 声明:f(int(*a)[3])传参:f(a) 4、我们在编写程序的时候却需要用到各个维数都不固定的二维数组作为参数,这就难办了,编译器不能识别阿,怎么办呢?不要着急,编译器虽然不能识别,但是我们完全可以不把它当作一个二维数组,而是把它当作一个普通的指针,再另外加上两个参数指明各个维数,然后我们为二维数组手工寻址,这样就达到了将二维数组作为函数的参数传递的目的,根据这个思想,我们可以把维数固定的参数变为维数随即的参数,例如: void Func(int array[3][10]); void Func(int array[][10]); 变为: void Func(int **array, int m, int n); 在转变后的函数中,array[i][j]这样的式子是不对的(不信,大家可以试一下),因为编译器不能正确的为它寻址,所以我们需要模仿编译器的行为把array[i][j]这样的式子手工转变为: *((int*)array + n*i + j); 在调用这样的函数的时候,需要注意一下,如下面的例子: int a[3][3] = { {1, 1, 1},{2, 2, 2},{3, 3, 3} }; Func(a, 3, 3); 根据不同编译器不同的设置,可能出现warning 或者error,可以进行强制转换如下调用: Func((int**)a, 3, 3); 其实多维数组和二维数组原理是一样的,大家可以自己扩充的多维数组,这里不再赘述。写到这里,我先向看了这篇文章后悔的人道歉,浪费你的时间了。下面是一个完整的例子程序,这个例子程序的主要功能是求一个图中某个顶点到其他顶点的最短路经,图是以邻接矩阵的形式存放的(也就是一个二维数组),其实这个函数也是挺有用的,但是我们这篇文章的重点在于将二维数组作为函数的参数传递。 结构体是一个或者多个变量的集合,这些变量可能是不同的类型。Struct相当于生命了一种数据类型。Struct point { Int x;Int y;} Struct Point a;结构体的引用 对于变量可以直接用结构名.成员,或者使用指针 Struct point *pp Pp=&a;(*pp).x 或:pp->x 使用typedef类型定义的3种好处 1、表达方式更加简洁 2、(专用头文件)提高程序的可移植性 3、Typedef struct tnode * treeptr 显然更有表达力 输入输出等功能(printf scanf等)并不是C语言本身的组成部分,它们是C语言标准库中的函数提供的功能,无论是window还是linux,这些函数都有标准的格式和相同的功能。函数声明只是告诉编译器数据类型,并不分配具体空间。 VB中串口通讯的实现.txt VB中串口通讯的实现 ------------------ 一、概述 串口通讯作为一种古老而又灵活的通讯方式,被广泛地应用于PC间的通讯以及PC和单片机之间的通讯之中。提到串口通讯的编程,人们往往立刻想到C、汇编等对系统底层操作支持较好的编程语言以及大串繁琐的代码。 实际上,只要我们借助相关ActiveX控件的帮助,即使是在底层操作一向不被人看好的VB中,一样能够实现串口通 讯,甚至其实现方法和C、汇编相比,要更加快捷方便。下面,笔者就介绍一下在VB中实现串口通讯的方法。 在Visual Basic中有一个名为Microsoft Communication Control(简称MSComm)的通讯控件。我们只要通 过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。下面,笔者就简要地介绍一下 MSComm控件的使用方法。 二、MSComm控件的主要属性、事件 1、MSComm的属性 由于MSComm控件属性很多,在此笔者仅介绍与实现串口通讯密切相关的核心属性。 Commport:设置通讯所占用的串口号。如设成1(默认值),表示对Com1进行操作。 Setting:对串口通讯的相关参数。包括串口通讯的比特率,奇偶校验,数据位长度、停止位等。其默认值 是“9600,N,8,1”,表示串口比特率是9600bit/s,不作奇偶校验,8位数据位,1个停止位。 Portopen:设置串口状态,值为True时打开串口,值为False时关闭串口。 Input:从输入寄存器读取数据,返回值为从串口读取的数据内容,同时输入寄存器将被清空。 Ouput:发送数据到输出寄存器。 InBufferCount:设置输入寄存器所存储的字符数,当将其值设为0时,则输入寄存器将被清空。 InputMode:设置从输入寄存器中读取数据的形式。若值为0,则表示以文本形式读取;值为1,则表示以 二进制形式读取。 OutBufferCount:设置输出寄存器所存储的字符数,当将其值设为0时,则输出寄存器将被清空。 RThreshold:设置在MSComm控件设置CommEvent属性为comEvReceive并产生OnComm事件之前要接受的字符 数。 CommEvent属性:返回最近的通讯事件或错误。通过对它具体属性值的查询,我们就可以获得通讯事件和通 讯错误的完整信息。当其值是comEvReceive时表示接收到数据。 2、MSComm的事件 除了公共事件之外,MSComm只有一个OnComm事件。当CommEvent属性值变化时将发生OnComm事件,指示发生 一个通讯事件或错误。当我们设置Rtheshold属性值为0时,将使得捕获comEvReceive事件无效。 三、串口通讯编程实例 在完成了对MSComm控件的简要介绍之后,笔者就以实际程序为例,介绍一下串口通讯的具体实现方法。 1、PC机间的串口通讯 (1)、实现方法: A、新建一个窗体,在上面放两个Text控件、两个CommandButton控件和两个Label控件(如图1.bmp所示)。 具体见下表: 控件类型 名称 Caption属性 作用 ----------------- Text Text1-------输入所要发送的信息 Text Text2-------显示接收到的信息 CommandButton Command1 发 送---------CommandButton Command2 退 出--------- Label Label1 发送的数据 提示 Label Label2 接收的数据 提示 B、在控件工具箱中的空白处点击鼠标右键,在弹出的菜单中选择“部件”,在弹出的窗口中的控件列表中 找到“Microsoft Comm Control”,将其选中,在点击“应用”、“关闭”,在控件工具栏中就会出现一个电 话的小图标。 C、用串口线将两台电脑连接起来。您可以使用Com1对Com1的对应连接,也可以使用Com1和Com2的交叉连接。 本程序使用的是Com1对Com1的连接。 D、输入以下代码: Private Sub Command1_Click() '...发送数据 MSComm1.OutBufferCount = 0 '...清空输出寄存器 MSComm1.Output = Text1.Text '...发送数据 End Sub Private Sub Command2_Click() '...退出 Unload Me End Sub Private Sub Form_Load() '...初始化 MSComm1.CommPort = 1 '...使用Com1口 MSComm1.Settings = “9600,n,8,1” '...设置通讯参数 MSComm1.PortOpen = True '...打开串口 End Sub Private Sub Mscomm1_Oncomm() '...通讯事件发生 Select Case MSComm1.CommEvent Case comEvReceive '...有接受事件发生 Text2.Text = MSComm1.Input '...接受显示数据 MSComm1.InBufferCount = 0 '...清空输入寄存器 End Select End Sub 2、PC机与单片机之间的通讯 PC机与单片机之间的通讯被广泛的用于工业、医疗测控等领域之中。在应用中,我们通常将单片机作为“感 受器”和“效应器”,负责数据采集、响应计算机发出的指令对电路进行控制,有时也进行一些简单的运算,最后再将执行数据反馈给计算机处理。本程序将实现在PC机上输入一个0-255之间的整数,将此数据发送到单片 机,单片机接收到数据后,将数据在显示管上显示,再将此数除以2,将得数返回给PC机。(运行效果如图 3.BMP所示)其实现方法如下: A、同PC机间通讯的实现方法A-B。 B、连接电脑和单片机。注意!由于PC机端的RS232电平与单片机端TTL的并不不匹配,故应注意电平转换。 C、在VB中输入以下代码: Private Sub Mscomm1_Oncomm() '...通讯事件发生 Dim indata As Variant Dim bte(0)As Byte Select Case MSComm1.CommEvent Case comEvReceive '...有接受事件发生 indata = MSComm1.Input '...注意!要通过MSComm控件发送或接收二进制数据必须用Variant类型的变量对二进 '...制Byte类型的变量进行转换! bte(0)= AscB(indata) Text2.Text = bte(0) MSComm1.InBufferCount = 0 '...清空输入寄存器 End Select End Sub Private Sub Command1_Click() '...发送数据 Dim Num As Integer Dim outbte(0)As Byte Num = Val(Text1.Text) outbte(0)= CByte(Num) MSComm1.OutBufferCount = 0 '...清空输出寄存器 MSComm1.Output = outbte(0)'...发送数据 End Sub Private Sub Command2_Click() '...退出 Unload Me End Sub Private Sub Form_Load() '...初始化 MSComm1.CommPort = 1 '...使用Com1口 MSComm1.Settings = “9600,n,8,1” '...设置通讯参数 MSComm1.PortOpen = True '...打开串口 End Sub D、单片机工作方式置于1,比特率设为9600bit/s。在单片机上,我们只得使用汇编语言编写,并且调用中 断实现对串口数据的收发工作。源代码如下: PUSH PSW ;将程序状态字压入堆栈 PUSH ACC ;将累加器压入堆栈 CLR EA ;关闭系统中断 CLR RI ;清除中断标志位 MOV A,SBUF ;从接收寄存器中读取数据 MOV 70H,A ;分解数据百、十、个位并显示 MOV B,#100 DIV AB MOV 52H,A ;分解百位,送入存储器52H MOV A,B MOV B,#10 DIV AB MOV 51H,A ;分解十位,送入存储器51H MOV 50H,B ;分解个位,送入存储器50H MOV A,70H MOV B,#2 DIV AB;将接受的数据除以2 MOV SBUF,A ;将得数发送到输出寄存器 ACALL DL1 ;延时保证数据完整发送 ACALL DL1 CLR RI ;清除中断标志位 SETB EA ;打开系统中断 POP ACC;累加器出栈 POP PSW ;程序状态字出栈 RETI ;中断程序返回 3、编程环境 以上程序在Windows 2000 Professional,Visual Basic 6.0企业版,AT89C52型单片机下调试通过。 四、总结 从以上程序可以看出,在VB中利用MSComm控件,可以快速开发出串口通讯程序,从而大大提高编程效率。 演讲稿 尊敬的老师们,同学们下午好: 我是来自10级经济学(2)班的学习委,我叫张盼盼,很荣幸有这次机会和大家一起交流担任学习委员这一职务的经验。 转眼间大学生活已经过了一年多,在这一年多的时间里,我一直担任着学习委员这一职务。回望这一年多,自己走过的路,留下的或深或浅的足迹,不仅充满了欢愉,也充满了淡淡的苦涩。一年多的工作,让我学到了很多很多,下面将自己的工作经验和大家一起分享。 学习委员是班上的一个重要职位,在我当初当上它的时候,我就在想一定不要辜负老师及同学们我的信任和支持,一定要把工作做好。要认真负责,态度踏实,要有一定的组织,领导,执行能力,并且做事情要公平,公正,公开,积极落实学校学院的具体工作。作为一名合格的学习委员,要收集学生对老师的意见和老师的教学动态。在很多情况下,老师无法和那么多学生直接打交道,很多老师也无暇顾及那么多的学生,特别是大家刚进入大学,很多人一时还不适应老师的教学模式。学习委员是老师与学生之间沟通的一个桥梁,学习委员要及时地向老师提出同学们的建议和疑问,熟悉老师对学生的基本要求。再次,学习委员在学习上要做好模范带头作用,要有优异的成绩,当同学们向我提出问题时,基本上给同学一个正确的回复。 总之,在一学年的工作之中,我懂得如何落实各项工作,如何和班委有效地分工合作,如何和同学沟通交流并且提高大家的学习积极性。当然,我的工作还存在着很多不足之处。比日:有的时候得不到同学们的响应,同学们不积极主动支持我的工作;在收集同学们对自己工作意见方面做得不够,有些事情做错了,没有周围同学的提醒,自己也没有发觉等等。最严重的一次是,我没有把英语四六级报名的时间,地点通知到位,导致我们班有4名同学错过报名的时间。这次事使我懂得了做事要脚踏实地,不能马虎。 在这次的交流会中,我希望大家可以从中吸取一些好的经验,带动本班级的学习风气,同时也相信大家在大学毕业后找到好的工作。谢谢大家! VB网格中输入数据 VISUAL BASIC提供的网格控制(Grid)主要是用来直观地输出数据,但不能输入数据,使用起来很不方便。能不能向网格中输入数据呢?笔者提出了两种解决方法,供大家参考:方法一: 改写网格的KeyPress事件,在每次有合法字符输入时,把Grid的Text项和输入字符连接。这种方法缺点是:一代码较复杂,需要处理各种ASCII字符信息;二是通过编程只能实现很少的编辑功能,如用退格键删除前一字符,用Del键删除所有字符;三是这种方法不能输入汉字,使用起来受到很大的限制。 方法二: 利用一文本框作为缓冲,实现编辑功能。当网格改变行列时,把网格当前行列的内容传递给文本框;当网格中有ASCII字符产生时,把输入焦点设置为文本框,并把输入的ASCII字符送给文本框;当编辑完文本框的内容时,按Enter键或TAB键,把文本框的内容送给网格的当前行列,并把输入焦点设置为网格。如下程序所示(其中Textl为文本框,Labell为标签,Gridl为网格):Option ExplicitConst EnterAsc=13Const TabAsc=9Private Sub Form-Load()Labell.Caption=”请输入”End SubPrivate Sub Gridl-KeyPress(KeyAscii As Integer)Text1.StFocusTextl.SelStart=0If KeyAscii<>EnterAsc And KeyAscii<>TabAsc ThenSendKeys Chr(KeyAscii) End IFEnd SubPrivate Sub Gridl-RowColChange() Textl.Text=Grid1.TextEnd SubPrivate Sub Text1-KeyPress(KeyAscii As Integer)If KeyAscii=EnterAsc ThenGrid1.SetFocusKeyAscii=0End IfEnd SubPrivate Sub Text1-LostFocus() Grid1.Text=Text1.TextEnd Sub第四篇:VB中串口通讯的实现
第五篇:VB网格中输入数据
文档为doc格式
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。
VB中水晶报表使用[推荐五篇]
演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案 VB中水晶报表使用 第一步: 在VB工程中Project菜单加入"Add Crystal Report 9",报表名使用默认即可。这时Form2......
乡镇干部提拔考察对象思想工作小结
思想工作小结 本人***,男,苗族,1970年8月出生,2005年7月加入中国共产党,2005年6月参加工作,本科学历,现任***镇党委副书记、纪委书记。三年来,在镇党委、政府的正确领导下,在全镇干部......
课题_ORACLE编译失效对象小结
ORACLE编译失效对象小结 在日常数据库维护过程中,我们会发现数据库中一些对象(包Package、存储过程Procedure、函数Function、视图View、同义词.....)会失效,呈现无效状态(INVAL......
乡镇干部提拔考察对象思想工作小结
思想工作小结 本人***,男,苗族,1970年8月出生,2005年7月加入中国共产党,2005年6月参加工作,本科学历,现任***镇党委副书记、纪委书记。三年来,在镇党委、政府的正确领导下,在全镇干部......
Java面向对象重要概念小结
http://www.xiexiebang.com (implements)其他接口。例如: interface MyInterfc extends Runnable{ public void mthd(); abstract int mthd2(); } Duncan Network | 编程......
喜欢的女孩给你介绍对象怎么办?
www.xiexiebang.com 喜欢的女孩给你介绍对象怎么办? 我们来讨论一个非常有意思的问题, 这是很多男人都会遇到的问题。 你喜欢的女生给你介绍女朋友,到底是闹哪样啊? 为了了解女......
中船介绍
中船集团来我院招聘单位简介绍江南造船(集团)有限责任公司单位简介: 江南造船(集团)有限责任公司前身是1865年清朝创办的江南机器制造总局。她是中国名族工业的发祥地,是中国打......
vb学习中val函数补充用法vb
Val函数在执行转换时,在它不能识别为数字的第一个字符上,停止读入字符串。那些被认为是数值的一部分的符号和字符,例如美元号($)与逗号(,),都不能被识别。但是函数可以识别进位制符......