| 网站首页 | 业界新闻 | 群组 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 375 人关注过本帖
标题:三个事件可以写在一个“事件”中吗?
只看楼主 收藏
jrs123
Rank: 2
等 级:论坛游民
威 望:1
帖 子:621
专家分:14
注 册:2006-9-5
结帖率:93.75%
  已结贴   问题点数:20  回复次数:7   
三个事件可以写在一个“事件”中吗?
如下三个事件,每次编写一个框都要输入3次,请问,是否可以简化一些,写到一个“事件”里?
Private Sub Text8_Click()
Text8.Text = Val(Text8.Text) + 1 '鼠标点文字框一次自动加1
End Sub
Private Sub Text8_KeyPress(KeyAscii As Integer)
KeyAscii = 0 '不允许在框内用键盘写入
End Sub
Private Sub Text8_KeyDown(KeyCode As Integer, Shift As Integer)
Text8.Locked = True '框内字不能删除,只能统一用“清除”指令
End Sub
2018-03-07 18:36
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:206
帖 子:4185
专家分:25726
注 册:2008-10-15
  得分:10 
这三个事件,不能简化。

如果框很多,有二种办法
一种是自己封装为自定义控件,在控件里,就直接写好这三个事件来。对外只提供自己所需要的内容和事件。
一种是使用控件数组,写一遍代码就可以使用一堆控件。

很多窗体都需要使用,就建议第一种;只一个窗体使用,就建议第二种。

授人于鱼,不如授人于渔
早已停用QQ了
2018-03-08 08:41
jrs123
Rank: 2
等 级:论坛游民
威 望:1
帖 子:621
专家分:14
注 册:2006-9-5
  得分:0 
谢谢风吹过b版主的回复,框很多,应该用第一种方法,但不知如何封装自定义控件?能提供实例吗?
2018-03-08 08:56
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:206
帖 子:4185
专家分:25726
注 册:2008-10-15
  得分:0 
程序代码:
Option Explicit

'添加用户控件,然后在区域内放一个 Text1 控件
'
复制完整代码粘贴
'
功能:鼠标单击自加1,不可输入,不可删除,提供 清除命令
'
事件:会产生单击事件和内容修改事件
'
属性:提供 Text 属性,以便读取内容,此属性为只读
'
方法:提供 清除方法,以便清除内容

'事件声明:
Event Change() 'MappingInfo=Text1,Text1,-1,Change
Event Click() 'MappingInfo=Text1,Text1,-1,Click


Private Sub Text1_Click()
    Text1.Text = Val(Text1.Text) + 1 '鼠标点文字框一次自动加1
    RaiseEvent Click                '产生事件
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
    KeyAscii = 0 '不允许在框内用键盘写入
End Sub

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
    Text1.Locked = True '框内字不能删除,只能统一用“清除”指令
End Sub

'清除 方法,无返回值
Public Sub 清除()
    Text1.Text = 0      '清除,置为0
End Sub

Private Sub UserControl_Initialize()
    Text1.Text = 0      '初始化
End Sub

Private Sub UserControl_Resize()    '控件大小
    Text1.Move 0, 0, UserControl.ScaleWidth, UserControl.ScaleHeight
End Sub

Private Sub Text1_Change()
    RaiseEvent Change       '产生事件
End Sub

'Text 方法,有返回值,对外显示为 只读属性
Public Function Text() As Variant
    Text = Text1.Text
End Function


授人于鱼,不如授人于渔
早已停用QQ了
2018-03-08 08:58
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:206
帖 子:4185
专家分:25726
注 册:2008-10-15
  得分:0 
窗体测试代码:
程序代码:
Option Explicit

Private Sub Command1_Click()
    UserControl11.清除
End Sub

Private Sub UserControl11_Change()
    Text1.Text = UserControl11.Text
End Sub


测试通过。

授人于鱼,不如授人于渔
早已停用QQ了
2018-03-08 09:00
wmf2014
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:134
帖 子:1667
专家分:9338
注 册:2014-12-6
  得分:5 
响应了keypress事件并且设置keyascii=0则不需要再响应keydown事件,如果有好多文本框,则建议用控件数组,一个事件响应处理所有框。

能编个毛线衣吗?
2018-03-08 09:26
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:85
帖 子:905
专家分:5207
注 册:2015-8-10
  得分:5 
你这个是三个事件,所以没有办法合并。
每次编写一个框都要输入3次
这个是什么意思,是有很多这种文本框,每个文本框写三次么?
如果是这样,可以考虑用控件数组来简化
2018-03-08 15:23
jrs123
Rank: 2
等 级:论坛游民
威 望:1
帖 子:621
专家分:14
注 册:2006-9-5
  得分:0 
谢谢各位的回复,由于窗口内文本框不超过30个,暂时用复制的方法。
2018-03-09 21:50







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

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