一次帮朋友写VB程序引发的深思
2008-12-29 01:51
267 查看
今天帮朋友写VB小程序,一回过头,才知道几乎全不记得了.
这个.所以现在贴一点VB的语法上来吧.真无法
VB有2种方法可以一次性的将字符串放入数组中:
方法一:
a=array("abc","abcd","ttt")
方法二:
b="abc,abcd,ttt"
a=split(b,",")
Select Case <变量名>
case <变量值>
进行的事件...
case <变量值>
进行的事件...
case <变量值>
进行的事件...
case <变量值>
进行的事件...
case else
进行的事件...
End Select //过程结束
***************************************************
VB 里的 select 语句和 C++ 里的 switch 语句相同
不过 每一个"Case"结束时无需 <break> 切记!!
动态添加控件
示例1
Option Explicit
Dim oCtrl As Object
'使得控件可以响应事件
Dim WithEvents MyBtn As CommandButton
Private Sub Form_Load()
Dim i As Integer
'先在窗体上加载个Label1(0)的标签控件
For i = 1 To 3
Load Me.Label1(i)
Label1(i).Top = Label1(i - 1).Top + 2 * Label1(0).Height
Label1(i).Caption = "Label1(" & i & ")"
Label1(i).Visible = True
Next
'Debug.Print Me.Label1.Count
LoadControl
LoadControlWithEvents
End Sub
Private Sub LoadControl()
Set oCtrl = Controls.Add("VB.CommandButton", "Button1")
With oCtrl
.Caption = "不会响应事件的按钮"
.Width = 2000
.Left = 100
.Top = 200
.Visible = True '控件加载后默认为不可见,故此步骤至关重要!
End With
End Sub
Private Sub LoadControlWithEvents()
Set MyBtn = Controls.Add("VB.CommandButton", "Button2")
With MyBtn
.Caption = "我可以响应事件!"
.Width = 1800
.Left = 100
.Top = 700
.Visible = True
End With
End Sub
Private Sub MyBtn_Click()
MsgBox "我要移除动态加载的控件了!"
Me.Controls.Remove "Button1"
Me.Controls.Remove "Button2"
End Sub
示例2
如果你想动态地增加控件,必须在设计阶段将控件放入Form,但可以将Visible属性设为False,将控件的Index属性设为0(即设置为控件数组)。然后在运行时使用Load方法加入控件。如下面这段代码:
Private Sub btnAdd_Click()
Static n As Integer
If n <>0 Then Load Label1(n)
Label1(n).Move 300, 200 + n *500
Label1(n).Visible = True
n = n + 1
End Sub
这段代码表示,当用户每按一次按钮时添加一个Label控制。
使用Unload可以动态删除控件数组中的控件。
在VB 6.0中,可以实现你的愿望,因为Form.Controls集合包括了Add方法、Remove方法。例如:
Option Explicit
Private WithEvents btnObj As CommandButton
Private Sub btnObj_Click()
MsgBox "这是动态添加的按钮。"
End Sub
Private Sub Form_Load()
Set btnObj = Controls.Add("VB.CommandButton", "btnObj")
With btnObj
.Visible = True
.Width = 2000
.Caption = "Hello"
.Top = 1000
.Left = 1000
End With
End Sub
这里使用WithEvent指定动态添加的控件的事件。
示例3
'添加两个控件: Command1 Command2
'在属性窗口将 Command2 改名为 CmdZu,并设置 Index 属性为 0
Private Sub Command1_Click()
'控件组有多个成员,卸载之
If CmdZu.Count > 1 Then
'卸载控件 CmdZu 1-5,0不能卸载,因为是设计时添加的
For I = 1 To 5
Unload CmdZu(I)
Next
Exit Sub
End If
'装载控件组的成员,1-5号
For I = 1 To 5
Load CmdZu(I)
CmdZu(I).Visible = True
CmdZu(I).Move CmdZu(0).Left, CmdZu(0).Top + CmdZu(0).Height * I * 1.1
CmdZu(I).Caption = "钮" & I
Next
End Sub
问题:
我有几万条数据,大致类型如下:
东风牌DH25090XXbg1G型车厢客可变车
嘉陵JH100-12两轮摩托车
VOLVO牌B7R670型客车底盘
基本上就是这样的...我现在想把每条数据分成三个部分,即前面汉字部分(包括汉字前的英文数字),中间英文数字部分,后面汉字部分
解答:
假设你的数据是存在c盘的1.txt,且每行为1条数据..
新建工程,1个按钮,3个list,
我在代码中使用了3个数组,分别是tmp1,tmp2和tmp3,用来存放提取出来的数据..
在代码前部使用了
ReDim Tmp1(100)
ReDim Tmp2(100)
ReDim Tmp3(100)
这里我给了一个100的初值,你可以根据数据量给定一个初值的,大于你的数据量就行,多了也无所谓..这样做的好处是提高效率,不然后读取每行后,逐行来redim preserve数组的话,效率很低.
后面这个:
ReDim Preserve Tmp1(i - 1)
ReDim Preserve Tmp2(i - 1)
ReDim Preserve Tmp3(i - 1)
就是将数组中多余的无用数组删除..
我后面放了list显示的部分,只是演示提取效果,你在实际运用得到tmp1,tmp2,tmp3以后,可以不需要后面的代码了..
====================全部完整代码===================
Dim CN As New ADODB.Connection '定义数据库的连接
2Dim Rs As New ADODB.Recordset
3
4CN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\NWIND.MDB;Persist Security Info=False"
5CN.Open
6
7Rs.CursorLocation = adUseClient
8Rs.Open "select * from employees", CN, adOpenDynamic, adLockBatchOptimistic
9
10Set MSHFlexGrid1.DataSource = Rs
[align=left] [/align]
这个.所以现在贴一点VB的语法上来吧.真无法
VB有2种方法可以一次性的将字符串放入数组中:
方法一:
a=array("abc","abcd","ttt")
方法二:
b="abc,abcd,ttt"
a=split(b,",")
Select Case <变量名>
case <变量值>
进行的事件...
case <变量值>
进行的事件...
case <变量值>
进行的事件...
case <变量值>
进行的事件...
case else
进行的事件...
End Select //过程结束
***************************************************
VB 里的 select 语句和 C++ 里的 switch 语句相同
不过 每一个"Case"结束时无需 <break> 切记!!
动态添加控件
示例1
Option Explicit
Dim oCtrl As Object
'使得控件可以响应事件
Dim WithEvents MyBtn As CommandButton
Private Sub Form_Load()
Dim i As Integer
'先在窗体上加载个Label1(0)的标签控件
For i = 1 To 3
Load Me.Label1(i)
Label1(i).Top = Label1(i - 1).Top + 2 * Label1(0).Height
Label1(i).Caption = "Label1(" & i & ")"
Label1(i).Visible = True
Next
'Debug.Print Me.Label1.Count
LoadControl
LoadControlWithEvents
End Sub
Private Sub LoadControl()
Set oCtrl = Controls.Add("VB.CommandButton", "Button1")
With oCtrl
.Caption = "不会响应事件的按钮"
.Width = 2000
.Left = 100
.Top = 200
.Visible = True '控件加载后默认为不可见,故此步骤至关重要!
End With
End Sub
Private Sub LoadControlWithEvents()
Set MyBtn = Controls.Add("VB.CommandButton", "Button2")
With MyBtn
.Caption = "我可以响应事件!"
.Width = 1800
.Left = 100
.Top = 700
.Visible = True
End With
End Sub
Private Sub MyBtn_Click()
MsgBox "我要移除动态加载的控件了!"
Me.Controls.Remove "Button1"
Me.Controls.Remove "Button2"
End Sub
示例2
如果你想动态地增加控件,必须在设计阶段将控件放入Form,但可以将Visible属性设为False,将控件的Index属性设为0(即设置为控件数组)。然后在运行时使用Load方法加入控件。如下面这段代码:
Private Sub btnAdd_Click()
Static n As Integer
If n <>0 Then Load Label1(n)
Label1(n).Move 300, 200 + n *500
Label1(n).Visible = True
n = n + 1
End Sub
这段代码表示,当用户每按一次按钮时添加一个Label控制。
使用Unload可以动态删除控件数组中的控件。
在VB 6.0中,可以实现你的愿望,因为Form.Controls集合包括了Add方法、Remove方法。例如:
Option Explicit
Private WithEvents btnObj As CommandButton
Private Sub btnObj_Click()
MsgBox "这是动态添加的按钮。"
End Sub
Private Sub Form_Load()
Set btnObj = Controls.Add("VB.CommandButton", "btnObj")
With btnObj
.Visible = True
.Width = 2000
.Caption = "Hello"
.Top = 1000
.Left = 1000
End With
End Sub
这里使用WithEvent指定动态添加的控件的事件。
示例3
'添加两个控件: Command1 Command2
'在属性窗口将 Command2 改名为 CmdZu,并设置 Index 属性为 0
Private Sub Command1_Click()
'控件组有多个成员,卸载之
If CmdZu.Count > 1 Then
'卸载控件 CmdZu 1-5,0不能卸载,因为是设计时添加的
For I = 1 To 5
Unload CmdZu(I)
Next
Exit Sub
End If
'装载控件组的成员,1-5号
For I = 1 To 5
Load CmdZu(I)
CmdZu(I).Visible = True
CmdZu(I).Move CmdZu(0).Left, CmdZu(0).Top + CmdZu(0).Height * I * 1.1
CmdZu(I).Caption = "钮" & I
Next
End Sub
问题:
我有几万条数据,大致类型如下:
东风牌DH25090XXbg1G型车厢客可变车
嘉陵JH100-12两轮摩托车
VOLVO牌B7R670型客车底盘
基本上就是这样的...我现在想把每条数据分成三个部分,即前面汉字部分(包括汉字前的英文数字),中间英文数字部分,后面汉字部分
解答:
假设你的数据是存在c盘的1.txt,且每行为1条数据..
新建工程,1个按钮,3个list,
我在代码中使用了3个数组,分别是tmp1,tmp2和tmp3,用来存放提取出来的数据..
在代码前部使用了
ReDim Tmp1(100)
ReDim Tmp2(100)
ReDim Tmp3(100)
这里我给了一个100的初值,你可以根据数据量给定一个初值的,大于你的数据量就行,多了也无所谓..这样做的好处是提高效率,不然后读取每行后,逐行来redim preserve数组的话,效率很低.
后面这个:
ReDim Preserve Tmp1(i - 1)
ReDim Preserve Tmp2(i - 1)
ReDim Preserve Tmp3(i - 1)
就是将数组中多余的无用数组删除..
我后面放了list显示的部分,只是演示提取效果,你在实际运用得到tmp1,tmp2,tmp3以后,可以不需要后面的代码了..
====================全部完整代码===================
Dim CN As New ADODB.Connection '定义数据库的连接
2Dim Rs As New ADODB.Recordset
3
4CN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\NWIND.MDB;Persist Security Info=False"
5CN.Open
6
7Rs.CursorLocation = adUseClient
8Rs.Open "select * from employees", CN, adOpenDynamic, adLockBatchOptimistic
9
10Set MSHFlexGrid1.DataSource = Rs
[align=left] [/align]
相关文章推荐
- 一个卖了1300的Java程序引发的深思
- 一次单例模式引发的深思
- VB.NET程序只能启动一次
- 完整的VB.NET的语法解析程序
- VB Shell调用后 等待程序运行结束
- c#(或vb.net)程序改进
- 被Ext整了一次,用的朋友请注意。
- [转载]VB程序逆向反汇编常见的函数
- 打开第二次VB程序时通知第一次运行的程序并自己关闭的方法
- 总结:今天在MSN Group里面和一些朋友谈ASP.net程序的性能优化
- Delphi中,让程序只运行一次的方法
- vb编写串口调试程序
- Android中的“再按一次返回键退出程序”功能实现
- 求助,用VB编写个计算程序 高手解答
- 在VB和VB.NET程序中判断当前是否运行于开发环境中
- 一次值得深思的面试
- 一次值得深思的面试
- 一次值得深思的面试
- 现在还在用VB6编程的朋友可以来看一下,我写的一个小程序,在VB6开发环境下支持鼠标滚动轮的操作
- 一次优化引发的血案