vb 控件属性 数组解决办法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Vb 属性接口数组解决办法

前不久制作Activex 控件,自定义接口成员,本来想通过外界传递数组给控件,但是我没有找到设置接口成员属性为数组的方法(我是个VB初学者,直到目前也没有找到方法)。后来发现vb中字符串长度可以存放多达2亿个字符。想到了将数组转换为字符串然后用字符串转换为数组的方法。

整体思路:在控件外接程序中将数组生成字符串,在控件里面将得到的字符串转换为数组完成数组的传递。举例详细代码如下宿主程序中按钮Command1单击触发以下函数运行:第一个For 循环生成x(0 to 50),y(0 to 50)两个数组。a,b为两个字符串,其第一个字符(数字形式)存放数组元素数目一共从0到50,有51个元素。Str()指令是将数字转换为字符数字,比如将51转换为“51”。第二个For循环将a,b两个字符串不断的添加字符(数字转换为字符形式,采用&连接,中间用逗号隔开)。从而a,b字符串分别是“51,0,1,2,3……,50”和“51,627.5 578.5 531.5 486.5……627.5”

控件的名称为ctr,为其设置了三个属性接口sn(布尔型) snx(字符串)sny(字符串)。其中snx,sny分别用于承接外界传递的字符串,Sn为某个位(与该主题无关,在控件中指示另外某个事件的)Private Sub Command1_Click()

Dim cd As Integer

Dim x() As Double

Dim y() As Double

cd = 50

ReDim x(cd)

ReDim y(cd)

For i = 0 To cd Step 1

x(i) = i

y(i) = (i - 25) ^ 2 + 2.5

Next i

Dim a As String

Dim b As String

a = Str(cd + 1)

b = Str(cd + 1)

For i = 0 To cd Step 1

a = a & "," & Str(x(i))

b = b & "," & Str(y(i)) Next i

ctr.sn = True

ctr.snx = a

ctr.sny = b

End Sub

控件中程序字符串处理代码Private Sub zhunhuan()

Dim xa() As Double

Dim ya() As Double

Dim af2() As String

Dim af3() As String

af2 = Split(m_snx, ",")

af3 = Split(m_sny, ",")

Dim cd As Integer

cd = Int(Val(af2(0))) ReDim ya(cd - 1)

ReDim xa(cd - 1)

For i = 0 To (cd - 1) Step 1 xa(i) = Val(af2(i + 1)) Next i

For i = 0 To (cd - 1) Step 1

ya(i) = Val(af3(i + 1))

Next i

End Sub

上述代码split函数将字符串剥离成一个数组从而af2(),af3()中存放字符即af3()中af3(0)为“51” af3(1)为“627.5” af3(2)为“578.5”For循环中Val(af3(i + 1))将af3(i + 1)中元素由字符转换为数字即af3(1)由“627.5”变换成为627.5 从而完成了整个数组由宿主程序往控件的传递。

附:程序前面自动生成的属性代码(即在属性设置完成向导生成的代码)

Const m_def_snx = "0"

Const m_def_sny = "0"

Const m_def_sn = 0

'属性变量:

Dim m_snx As String

Dim m_sny As String

Dim m_sn As Boolean

附:程序后面生成的属性代码(应该分别有三对get,let函数以及InitProperties(),ReadProperties(PropBag As PropertyBag) ,WriteProperties(PropBag As PropertyBag)等函数因为只有下面的函数要做添加代码,其它的几个都原封不动不做修改)。所作的修改也仅仅是在PropertyChanged "sny"后面添加了一句Call zhuanhuan也就是宿主程序中ctr.sn = True ctr.snx = a ctr.sny = b依次传递完三个属性后在最后一个属性传递完后启动zhuanhuan函数。

Public Property Let sny(ByVal New_sny As String)

m_sny = New_sny

PropertyChanged "sny"

Call zhuanhuan

End Property

作为一个初学者仅仅提出自己在项目中一个问题的解决办法,供大家讨论参考。

相关文档
最新文档