关于VB的事件触发及代码执行的一个奇怪问题,望高手解惑,谢谢!

logan0279 2009-08-05 09:34:31
第一个问题:昨天刚发现的,结合TextBox MSHFlexGrid 进行设计,其中分别有 TextBox 的KeyDown KeyPress 事件,MSHFlexGrid 的 LeaveCell EnterCell GotFocus 事件
后来又加入 TextBox 的 LostFocus 事件,事件代码如下:
Private Sub TextBox_LostFocus()
TextBox.Visible=False
End Sub

结果加入此代码后,当我点击某单元格的时候,没有触发MSHFlexGrid的EnterCell事件,而如果我在EnterCell事件中加MsgBox “123”以后,则该事件就能正常触发了。

Why? 在下百思不得其解呀,为何加入Msgbox事件就能触发了呢?

第二个问题:同第一个差不多,无TextBox_LostFocus事件,EnterCell事件触发,用Debug.Print 检测代码似乎也执行也正常,但窗体显示不正常。代码如下:
Private Sub MSHFlexGrid_EnterCell()
With MSHFlexGrid
TextBox.Width=.CellWidth
TextBox.Height=.CellHeight
End Sub

用Debug.Print检测Width、Height赋值正常,但窗体显示的TextBox总比单元格大一些。但如果将Debug.Print换成MsgBox则显示立即恢复正常,TextBox变得和单元格一样大了。

以上两问,在下想破头也不知道问题在哪里,望高手解惑,在下感激不尽!
...全文
95 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
clear_zero 2009-08-07
  • 打赏
  • 举报
回复
Private Sub TextBox_LostFocus()
TextBox.Visible=False
End Sub
不要把visible=false放到textbox的lostfocus里面,把它放到你的grid leavecell或者grid的lostfocus里面试试看
神马都能聊 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 logan0279 的回复:]
昨天晚上又实验了下,第一个问题感觉确实可能跟焦点有关。第二个问题已经通过其他途径解决。
[/Quote]
方便的话把你的几个事件的代码发出来看下。
logan0279 2009-08-06
  • 打赏
  • 举报
回复
昨天晚上又实验了下,第一个问题感觉确实可能跟焦点有关。第二个问题已经通过其他途径解决。
倒大霉的上帝 2009-08-05
  • 打赏
  • 举报
回复
用 ShellExecute

Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
神马都能聊 2009-08-05
  • 打赏
  • 举报
回复
1、应该是和焦点问题有关系。请把你调用EnterCell事件的代码贴出来看下,调用msgbox会产生焦点切换的问题。
2、控件用的单元格大小单位不同,可能和窗体的默认大小单位有关系。
logan0279 2009-08-05
  • 打赏
  • 举报
回复
要沉了,自己顶一下!
logan0279 2009-08-05
  • 打赏
  • 举报
回复
关于第二个问题,窗体的默认大小单位和控件的单元格的大小单位应该是一样的都是 缇 。
logan0279 2009-08-05
  • 打赏
  • 举报
回复
EnterCell事件代码:

Private Sub mshMTRReg_EnterCell()

With mshMTRReg
mshText.Top = .Top + .CellTop
mshText.Left = .Left + .CellLeft
mshText.Width = .CellWidth - 20
mshText.Height = .CellHeight - 20
mshText.Text = .Text
mshText.SelStart = 0
mshText.SelLength = Len(mshText.Text)
End With

End Sub

谢谢了!

1,217

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧