标题:三个事件可以写在一个“事件”中吗?
只看楼主
jrs123
Rank: 2
等 级:论坛游民
威 望:1
帖 子:627
专家分:14
注 册:2006-9-5
结帖率:94.12%
已结贴  问题点数: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
搜索更多相关主题的帖子: 事件 Private Sub End Integer 
2018-03-07 18:36
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:10 
这三个事件,不能简化。

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

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

授人于鱼,不如授人于渔
早已停用QQ了
2018-03-08 08:41
jrs123
Rank: 2
等 级:论坛游民
威 望:1
帖 子:627
专家分:14
注 册:2006-9-5
得分:0 
谢谢风吹过b版主的回复,框很多,应该用第一种方法,但不知如何封装自定义控件?能提供实例吗?
2018-03-08 08:56
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册: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
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册: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: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:5 
响应了keypress事件并且设置keyascii=0则不需要再响应keydown事件,如果有好多文本框,则建议用控件数组,一个事件响应处理所有框。

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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-485071-1-1.html




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

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