一个有趣的VB问题,不知高手能否回答??是Bug吗?

wenky_2000 2004-07-16 04:05:20
并不是非要这么做,只是不明白为什么?
窗体放了一个MSFlexGrid1和Text1
MSFlexGrid1最小行高400,Text1的visble属性Flase

问题:
事件:鼠标点击MSFlexGrid1的单元格,
三种操作:1.设断点于Private Sub MSFlexGrid1_EnterCell和
Private Sub Text1_LostFocus()
2.只设断点Private Sub Text1_LostFocus()
3.不设任何断点

三种操作方式Text1的出现情况不同,
1.Private Sub Text1_LostFocus()根本不执行,Text1一直显示
2,3. Private Sub Text1_LostFocus()执行,Text1有时显示

尝试发现去掉
If Me.Text1.Visible And Me.Text1.Enabled Then
Me.Text1.SetFocus
End If
则三种方式一样

关键问题:为什么Private Sub MSFlexGrid1_EnterCell,设断点与不设断点完全不同???


代码如下:
Private Sub Form_Load()
Me.MSFlexGrid1.Cols = 5

Dim i As Integer

For i = 0 To 4
Me.MSFlexGrid1.ColWidth(i) = 2000
Next

For i = 1 To 10
Me.MSFlexGrid1.AddItem ""

Me.MSFlexGrid1.TextMatrix(i, 0) = "aaa"
Me.MSFlexGrid1.TextMatrix(i, 1) = "bbb"
Me.MSFlexGrid1.TextMatrix(i, 2) = "cc"
Me.MSFlexGrid1.TextMatrix(i, 3) = "dd"
Me.MSFlexGrid1.TextMatrix(i, 4) = "fff"
Next
End Sub

Private Sub MSFlexGrid1_EnterCell()
Me.Text1.Visible = True

Me.Text1.Left = Me.MSFlexGrid1.Left + Me.MSFlexGrid1.ColPos(Me.MSFlexGrid1.ColSel) + 50

Me.Text1.Top = Me.MSFlexGrid1.Top + Me.MSFlexGrid1.RowPos(Me.MSFlexGrid1.RowSel) + 50
Me.Text1.Width = Me.MSFlexGrid1.ColWidth(Me.MSFlexGrid1.ColSel)
Me.Text1.Height = Me.MSFlexGrid1.RowHeight(Me.MSFlexGrid1.RowSel)

Me.Text1.Text = Me.MSFlexGrid1.TextMatrix(Me.MSFlexGrid1.RowSel, Me.MSFlexGrid1.ColSel)

CurrRow = Me.MSFlexGrid1.RowSel
CurrCol = Me.MSFlexGrid1.ColSel
If Me.Text1.Visible And Me.Text1.Enabled Then
Me.Text1.SetFocus
End If
End Sub

Private Sub Text1_LostFocus()
Text1.Visible = False
End Sub

...全文
342 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
二师兄的老公 2004-07-22
  • 打赏
  • 举报
回复
焦点问题,调试中断点中断会使焦点发生变化。
姑且可以称之为Bug,像这种Bug很多。
rexyudl 2004-07-20
  • 打赏
  • 举报
回复
偶用MSHFlexGrid没发现你说的问题。

不过不能在ENTERCELL事件里实现你想做的功能。不然会有BUG的!
也就是说当你在当前单元格里点击的时候。文本框是不会显示的!
因为你没有离开当前单元格是不会引发ENTERCELL事件的!
warlord 2004-07-20
  • 打赏
  • 举报
回复
seek "MSFlexGrid"
northwolves 2004-07-17
  • 打赏
  • 举报
回复
我一般写在CLICK 事件中:

Private Sub Form_Load()
Me.MSFlexGrid1.Cols = 5

Dim i As Integer

For i = 0 To 4
Me.MSFlexGrid1.ColWidth(i) = 2000
Next

For i = 1 To 10
Me.MSFlexGrid1.AddItem ""

Me.MSFlexGrid1.TextMatrix(i, 0) = "aaa"
Me.MSFlexGrid1.TextMatrix(i, 1) = "bbb"
Me.MSFlexGrid1.TextMatrix(i, 2) = "cc"
Me.MSFlexGrid1.TextMatrix(i, 3) = "dd"
Me.MSFlexGrid1.TextMatrix(i, 4) = "fff"
Next
End Sub

Private Sub MSFlexGrid1_click()
Me.Text1.Visible = True

Me.Text1.Left = Me.MSFlexGrid1.Left + Me.MSFlexGrid1.ColPos(Me.MSFlexGrid1.ColSel) + 50

Me.Text1.Top = Me.MSFlexGrid1.Top + Me.MSFlexGrid1.RowPos(Me.MSFlexGrid1.RowSel) + 50
Me.Text1.Width = Me.MSFlexGrid1.ColWidth(Me.MSFlexGrid1.ColSel)
Me.Text1.Height = Me.MSFlexGrid1.RowHeight(Me.MSFlexGrid1.RowSel)

Me.Text1.Text = Me.MSFlexGrid1.TextMatrix(Me.MSFlexGrid1.RowSel, Me.MSFlexGrid1.ColSel)

CurrRow = Me.MSFlexGrid1.RowSel
CurrCol = Me.MSFlexGrid1.ColSel
If Me.Text1.Visible And Me.Text1.Enabled Then
Me.Text1.SetFocus
SendKeys "{home}+{end}"
End If
End Sub

Private Sub Text1_change()
MSFlexGrid1.Text = Text1.Text
End Sub
wenky_2000 2004-07-16
  • 打赏
  • 举报
回复
怎么搜呀,汗

大海捞针吗
wenky_2000 2004-07-16
  • 打赏
  • 举报
回复
文章什么标题?
daisy8675 2004-07-16
  • 打赏
  • 举报
回复
mark。。。文档中间有一篇文章,你去搜索一下,不过本身有bug,我写过更正代码的
wenky_2000 2004-07-16
  • 打赏
  • 举报
回复
关键问题:为什么Private Sub MSFlexGrid1_EnterCell,设断点与不设断点完全不同???

疑惑
熊孩子开学喽 2004-07-16
  • 打赏
  • 举报
回复
是要用这个来编辑网格内容对吧。
我写过这样的程序,开始的时候也用TEXT控件,后来就不用了,直接写就是了,在KEYPRESS事件中,配合TEXTMATRIX方法,就可以了
mmcgzs 2004-07-16
  • 打赏
  • 举报
回复
怎么了?
zcm123 2004-07-16
  • 打赏
  • 举报
回复
关注中。。。。。。。
chuting1 2004-07-16
  • 打赏
  • 举报
回复
up

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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