第一个问题:昨天刚发现的,结合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变得和单元格一样大了。以上两问,在下想破头也不知道问题在哪里,望高手解惑,在下感激不尽!

解决方案 »

  1.   

    1、应该是和焦点问题有关系。请把你调用EnterCell事件的代码贴出来看下,调用msgbox会产生焦点切换的问题。
    2、控件用的单元格大小单位不同,可能和窗体的默认大小单位有关系。
      

  2.   

    用 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
      

  3.   

    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 WithEnd Sub谢谢了!
      

  4.   

    Private Sub TextBox_LostFocus()
    TextBox.Visible=False
    End Sub 
    不要把visible=false放到textbox的lostfocus里面,把它放到你的grid leavecell或者grid的lostfocus里面试试看