| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1987 人关注过本帖
标题:出一个问题考考大家
只看楼主 加入收藏
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
VB里重载,我一般使用 过程 或函数 进行
我一般只用于可以重复使用的 代码 ,或者 放到一起不容易看懂的代码但又可以分块的代码 .

如 一个排列.

'数独求解主循环
do while t<>81
   call 计算    '进行处理
   t=view()     '显示并计数
loop

这里,我才会去使用函数.这里也没用到重载

把自己饶糊涂了.
----------------------------------------------------
对一个数组进行固定的操作.
如,一个函数,对数组进行移位
sub addcell(SZ() as long,cs as long)
    dim i as long
    for i=lbound(sz) to ubound(sz())-1
         sz(i)=sz(i+1)
    next i
    sz(ubound(sz())=cs
end sub

这样一个过程 ,生成的数组,就是一个向后队列. 数据是一个一个的压进去,没有弹出去的.用于只保留最后几个数据场合
我就是复用这个过程,来达到 代码的重用性.

如题目是,输入二组数据,然后比较最后10数据的之间的差.
输入数据使用 多行 text 框进行输入.

dim fj() as string ,i as long
dim a(1 to 10) as long ,b(1 to 10) as long
  fj=split(text1.text ,vbcrlf )
  for i=0 to ubound(fj())
     call addcell(a(),fj(i))     
  next i
  '上面四行与下面四行,也可以定义为一个过程进行复用代码
  fj=split(text2.text,vbcrlf)
  for i=0 to ubound(fj())
     call addcell(b(),fj(i))    '复用上面那个过程
  next i
  for i=1 to 10
    ? a(i);"-";b(i);"=";a(i)-b(i)
  next i


授人于鱼,不如授人于渔
早已停用QQ了
2010-04-26 22:21
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
回复 11楼 风吹过b
dim fj() as string ,i as long
dim a(1 to 10) as long ,b(1 to 10) as long
  fj=split(text1.text ,vbcrlf )
  for i=0 to ubound(fj())   ''这个for ... next不会变的,用为了重用这个for ... next而不重用for next里面的东西
     call addcell(a(),fj(i)) ''我的问题所在这里是会变的   
  next i
  '上面四行与下面四行,也可以定义为一个过程进行复用代码
  fj=split(text2.text,vbcrlf)
  for i=0 to ubound(fj())
     call addcell(b(),fj(i))    '复用上面那个过程
  next i
  for i=1 to 10
    ? a(i);"-";b(i);"=";a(i)-b(i)
  next i


[ 本帖最后由 ioriliao 于 2010-4-26 22:57 编辑 ]

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-04-26 22:53
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
收藏
得分:0 
程序代码:
'form1
Option Explicit
Private WithEvents test As class1

Private Sub Form_Load()
    Set test = New class1
    test.someFunction
End Sub

Private Sub test_fn1(i As Long)
    i = i + 1
    Debug.Print i
End Sub

 'class1
Option Explicit

Public Event fn1(i&)

Public Sub someFunction()
    Dim i&
   For i = 1 To 10
      RaiseEvent fn1(i)
   Next
End Sub

我也只能想到用事件了。
2010-04-27 00:11
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
回复 13楼 bczgvip
没有弹性, 因为for ...next里面的函数是会不同的,如果你用事件只能激发那个事件函数。
最好的办法是想办法如何在for next里插入一个函数。

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-04-27 08:10
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
收藏
得分:2 
CallByName?

VB QQ群:47715789
2010-04-28 13:13
纪永君
Rank: 2
来 自:山东蓬莱,蓬莱祥林
等 级:论坛游民
威 望:1
帖 子:68
专家分:37
注 册:2008-6-27
收藏
得分:2 
可以将for i=1 to n .......next i作为子程序,使用gosub语句来调用。十分的简便
2010-04-28 19:43
jiashie
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:237
专家分:999
注 册:2009-4-30
收藏
得分:2 
Interaction.CallByName,但是,效率下降。且被调用的函数必须在一个类模块中。
private sub someFunction(byval FnName)
dim obj as ...     '包含fnName的某个类
set obj =new ...
   for i=1 to 10
      interaction.CallByName obj,fnName,vbMethod,参数列表
   next
end sub
2010-04-29 09:28
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
回复 17楼 jiashie
这不是标准的解决方案

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-04-29 11:00
jiashie
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:237
专家分:999
注 册:2009-4-30
收藏
得分:0 
坐等标准的解决方案。。。
2010-04-30 08:59
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
回复 19楼 jiashie
标准答案https://bbs.bccn.net/thread-239594-1-1.html
我似乎一年前发的

/images/2011/147787/2011051411021524.jpg" border="0" />
2010-04-30 10:21
快速回复:出一个问题考考大家
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.055258 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved