您的位置:首页 > 编程语言 > VB

一次帮朋友写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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: