ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1656|回复: 23

[求助] 类模块中TextBox 没有Exit事件 怎么弄

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-6-2 13:54 | 显示全部楼层 |阅读模式
本帖最后由 opiona 于 2023-6-2 13:55 编辑

练习类模块的使用

TextBox的 Change,DbClick 已成功实现
但是未发现 Exit,Click,Enter事件
在类模块中自己直接写上去 但是不能触发

怎么在类模块设置这些事件, 或者其他办法实现相同的功能
就是 在窗体中的TextBox 能响应 Exit,Click,Enter事件

附件: 类textBox230602.rar (15.12 KB, 下载次数: 16)

1.jpg

TA的精华主题

TA的得分主题

发表于 2023-6-2 14:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 tanglf188 于 2023-6-2 14:24 编辑

有的啊,Click可以用MouseUP事件替代
enter可以用KeyDown替代


Private Sub TxtboxC_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then
End Sub
image.png

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-6-2 14:56 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
期盼已久,类中能实现Exit,Click,Enter事件,省不少代码。期待高人出现。

TA的精华主题

TA的得分主题

发表于 2023-6-2 15:08 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-6-2 15:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

需要在类模块里

TA的精华主题

TA的得分主题

发表于 2023-6-2 15:38 | 显示全部楼层
哦,类里面实现,既然没有那只能通过变通的方式实现。

exit实际就是焦点切换,进入其他控件。能不能用GetFocus或者setfocus试试?

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-2 20:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 opiona 于 2023-6-2 21:12 编辑
micch 发表于 2023-6-2 15:38
哦,类里面实现,既然没有那只能通过变通的方式实现。

exit实际就是焦点切换,进入其他控件。能不能用Ge ...

能不能具体些  Exit还未实现

TA的精华主题

TA的得分主题

发表于 2023-6-2 21:14 | 显示全部楼层
opiona 发表于 2023-6-2 20:06
能不能具体些  Exit还未实现

窗体控件没有get lost focus事件,没得搞,

用MouseMove事件可以模拟,但是只适合于鼠标移动导致控件失去焦点的情况,如果是enter或者tab等按键导致是exit,无法控制

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-2 23:13 | 显示全部楼层
最后的学习心得发出来 供大家指正

  1. Option Explicit
  2. Public WithEvents TxtboxC As MSForms.TextBox

  3. Private Sub TxtboxC_Change()
  4.     ClsStrConName = TxtboxC.Name  '//记录那个控件获得了焦点
  5.     mg = "Change 我是: " & TxtboxC.Name
  6.     MsgBox mg
  7. End Sub

  8. Private Sub TxtboxC_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  9.     ClsStrConName = TxtboxC.Name  '//记录那个控件获得了焦点
  10.     mg = "DblClick 我是: " & TxtboxC.Name
  11.     MsgBox mg
  12. End Sub

  13. Rem Click可以用MouseUP事件替代
  14. Private Sub TxtboxC_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  15.     If ClsStrConName <> "" Then
  16.         Rem 使用一个全局变量 记录最后操作的控件名
  17.         Rem 可以变向实现事件Exit
  18.         mg = " Exit 刚在是: " & ClsStrConName
  19.         MsgBox mg
  20.     End If
  21.     ClsStrConName = TxtboxC.Name  '//记录那个控件获得了焦点
  22.     mg = " MouseUP 我是: " & TxtboxC.Name
  23.     MsgBox mg
  24. End Sub

  25. 'Rem enter可以用KeyDown替代
  26. 'Private Sub TxtboxC_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  27. '    If KeyCode = 13 Then
  28. '        mg = "KeyDown 我是: " & TxtboxC.Name
  29. '    MsgBox mg
  30. '    End If
  31. 'End Sub

  32. Rem Exit可以用KeyDown替代  注意: 不支持鼠标移动导致的退出文本框
  33. Private Sub TxtboxC_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  34.     If KeyCode = 13 Then
  35.         ClsStrConName = TxtboxC.Name  '//记录那个控件获得了焦点
  36.         mg = "enter 我是: " & TxtboxC.Name
  37.         MsgBox mg
  38.     End If
  39.     If KeyCode = 9 Then
  40.         ClsStrConName = TxtboxC.Name  '//记录那个控件获得了焦点
  41.         mg = "Tab 我是: " & TxtboxC.Name
  42.         MsgBox mg
  43.     End If
  44. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-6-3 00:38 | 显示全部楼层
  1. '// 类名称:ClsTextBox
  2. Public WithEvents txtbox As MSForms.TextBox
  3. '// txtName 是公共变量记录前一个textBox
  4. Private Sub txtbox_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  5.     If KeyCode = 13 Or KeyCode = 9 Then
  6.         txtName = txtbox.Name
  7.         txtbox.Parent.Caption = "退出的是: " & txtName
  8.     End If
  9. End Sub

  10. Private Sub txtbox_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  11.     If txtName = txtbox.Name Then
  12.     Else
  13.         txtbox.Parent.Caption = "当前激活的是: " & txtbox.Name
  14.         txtName = txtbox.Name
  15.         txtbox.SetFocus
  16.     End If
  17. End Sub

  18. ''窗体初始化实例化textbox,集合col声明为公共变量
  19. ''Private Sub UserForm_Initialize()
  20. ''    Set Col = New Collection
  21. ''
  22. ''    Dim cls As ClsTextBox
  23. ''    For Each ctl In Me.Controls
  24. ''        If VBA.TypeName(ctl) = "TextBox" Then
  25. ''            Set cls = New ClsTextBox
  26. ''            Set cls.txtbox = ctl
  27. ''            Col.Add cls
  28. ''        End If
  29. ''    Next
  30. ''    Me.Label1.Caption = "..."
  31. ''End Sub
复制代码

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-9-29 12:19 , Processed in 0.042864 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表