| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1249 人关注过本帖, 1 人收藏
标题:有没有更短的实现?
只看楼主 加入收藏
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
结帖率:78.95%
收藏(1)
 问题点数:0 回复次数:14 
有没有更短的实现?
源码:
bol.rar (12.18 KB)

效果:
图片附件: 游客没有浏览图片的权限,请 登录注册

Dim op As Boolean
Dim of As Boolean
Dim flag(2) As Boolean
Private Sub Command1_Click(Index As Integer)
   If Command1(Index).Caption = "开" Then
      Command1(Index).Caption = "关"
      flag(Index) = True
   Else
      Command1(Index).Caption = "开"
      flag(Index) = False
   End If
   Dim f As Boolean
   f = flag(1) And flag(2)
   Image1.Picture = LoadPicture(IIf(f, "on.gif", "off.gif"))
End Sub

Private Sub Command2_Click()
    If Command2.Caption = "开" Then
        Command2.Caption = "关"
        Image2.Picture = LoadPicture("on.gif")
    Else
        Command2.Caption = "开"
        Image2.Picture = LoadPicture("off.gif")
    End If
End Sub
搜索更多相关主题的帖子: 实现 
2008-10-28 22:06
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
Option Explicit

Dim 灯1 As Boolean
Dim 灯2(1 To 2) As Boolean

Private Sub Command1_Click(Index As Integer)
灯2(Index) = Not 灯2(Index)
If 灯2(Index) Then
    Command1(Index).Caption = "关"
Else
    Command1(Index).Caption = "开"
End If
If 灯2(1) And 灯2(2) Then
   Image1.Picture = LoadPicture("on.gif")
Else
   Image1.Picture = LoadPicture("off.gif")
End If

End Sub

Private Sub Command2_Click()
灯1 = Not 灯1
If 灯1 Then
    Command2.Caption = "关"
    Image2.Picture = LoadPicture("on.gif")
Else
    Command2.Caption = "开"
    Image2.Picture = LoadPicture("off.gif")
End If
End Sub

[[it] 本帖最后由 风吹过b 于 2008-10-28 23:09 编辑 [/it]]

授人于鱼,不如授人于渔
早已停用QQ了
2008-10-28 23:07
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
按你用IIF函数的话,整个代码就是这样的

Option Explicit
Dim 灯1 As Boolean
Dim 灯2(1 To 2) As Boolean

Private Sub Command1_Click(Index As Integer)
灯2(Index) = Not 灯2(Index)
Command1(Index).Caption = IIf(灯2(Index), "关", "开")
Image1.Picture = LoadPicture(IIf(灯2(1) And 灯2(2), "on.gif", "off.gif"))
End Sub

Private Sub Command2_Click()
灯1 = Not 灯1
Command2.Caption = IIf(灯1, "关", "开")
Image2.Picture = LoadPicture(IIf(灯1, "on.gif", "off.gif"))
End Sub


总体来讲,
我的代码运行速度绝对比你的代码速度要快.
原因
1\是访问控件属性方面,你要读2个次控件属性,写4次控件属性.
我只需要写4次控件属性.
从这个方面来,你的性能开销要大大的增加.
2\是字符比较也是一个CPU性能开销的大户,所以一般推荐有字符串是否为空,都不是建议直接写
if s<>"" then
而是建议写成
if len(s)>0 then
原因也就是在VB的字符串运算,会部要调用DLL来完成,这里面有很大的性能开销. S<>"" 需要调用二次DLL, 而len(s)>0只要调用一次DLL.

授人于鱼,不如授人于渔
早已停用QQ了
2008-10-28 23:19
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
[bo][un]风吹过b[/un] 在 2008-10-28 23:07 的发言:[/bo]

Option Explicit

Dim 灯1 As Boolean
Dim 灯2(1 To 2) As Boolean

Private Sub Command1_Click(Index As Integer)
灯2(Index) = Not 灯2(Index)
If 灯2(Index) Then
    Command1(Index).Caption = "关"
 ...


呵呵...不是我想要的效果...

/images/2011/147787/2011051411021524.jpg" border="0" />
2008-10-29 00:00
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
[bo][un]风吹过b[/un] 在 2008-10-28 23:19 的发言:[/bo]

按你用IIF函数的话,整个代码就是这样的

Option Explicit
Dim 灯1 As Boolean
Dim 灯2(1 To 2) As Boolean

Private Sub Command1_Click(Index As Integer)
灯2(Index) = Not 灯2(Index)
Command1(Index).Ca ...


有些接近了...不过我最希望的是把这句Dim 灯2(1 To 2) As Boolean给杀掉.

/images/2011/147787/2011051411021524.jpg" border="0" />
2008-10-29 00:07
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
你要什么效果啊.第二段那种的?
每个过程3行代码的?

其实你那个代码已经很短小了, 如果规定只能用IF命令的,想超越你那个代码的再短小,基本不太可能的.
最少我想不出.

授人于鱼,不如授人于渔
早已停用QQ了
2008-10-29 00:07
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
收藏
得分:0 
呵呵...此短非彼短...
希望的是减少变量...

/images/2011/147787/2011051411021524.jpg" border="0" />
2008-10-29 00:14
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
....
才3个变量啊.
你是2个变量.

你有三个按钮,有三种状态.
你要减少变量,用 字节位段(VB里没这个概念)来保存数据吧.只需要3位.
只需要一个变量就可以了,但代码长度,会拉的比较长.

授人于鱼,不如授人于渔
早已停用QQ了
2008-10-29 00:16
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
dim 状态 as byte  '存储 8 键的状态
const 状1= 1     '1号灯键
const 状2= 2     '2号灯1键
const 状3= 4     '2号灯2键

if 状态 AND 状1 <> 状态 then
'如状态是: 00 00 00 01  AND 00 00 00 01 后还是变成 00 00 00 01 不产生变化
'如状态是: 00 00 00 01 AND  00 00 00 01 后就会变成 00 00 00 01 ,发生的变化
'所以,如果产生了变化,那就是这位进行了变化,来确保这位是什么状态.

这程序,写了费力,理解起来更费力,我不写了,你写吧.

授人于鱼,不如授人于渔
早已停用QQ了
2008-10-29 00:22
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
我改了一个,不用变量了,用tag,如3#说的,这样效率大大降低,不过功能反正是实现了(那个单个按钮类似,我就不写了)
几个值要先初始化一下,不过可以在设计阶段就设置好,Form_Load的代码就可以省略


Private Sub Command1_Click(Index As Integer)
   Command1(Index).Tag = Command1(Index).Tag Xor 1
   Command1(Index).Caption = IIf(Command1(Index).Tag, "开", "关")
   Image1.Picture = LoadPicture(IIf(((Command1(1).Tag) And (Command1(2).Tag)), "on.gif", "off.gif"))
End Sub

Private Sub Form_Load()
  Command1(1).Caption = "关"
  Command1(2).Caption = "关"
  Command1(1).Tag = 0
  Command1(2).Tag = 0
End Sub

从BFS(Breadth First Study)到DFS(Depth First Study)
2008-10-29 08:04
快速回复:有没有更短的实现?
数据加载中...
 
   



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

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