瓜西西

导航

MSHFlexGrid & FlexTxt 状态记录

目的:  用户在离开 FlexTxt (注: LostFocus) 时, 就可以进行判断数值是否有效. 无效时, 不可离开当前位置.

注: 事实证明这是一个艰巨的任务. 目前也只可在一个弹出的模式对话框中有保证. 在子窗口中是否可行未知.

'-------------------------------------------------------------------
'2010-11-19 测试结果:
'在FlexTxt.focus 的状态下, 点击 MSHFlexGrid的一个cell
'
'触发的顺序是:
' (0) FlexTxtBox_Validate <<---- 特别注意:如果 FlexTxt 不是 focus 的状态,这一步是不会执行的。
' MSHFlexGrid1_MouseDown <<----------------- 2012-2-13 test ??? 用于判断是否鼠标点击。
' 最大的问题是: 有时并不是出现在EnterCell之前, 而是之后.
' (1) MSHFlexGrid_EnterCell
' MSHFlexGrid1_Click <<------------------------- 2012-2-6 不成立
' (2) FlexTxtBox_lostFocus
' (3) MSHFlexGrid_GetFocus
' MSHFlexGrid1_Click <<------------------------- 2012-2-10 test ???
' (4) MSHFlexGrid_LostFocus
' (5) FlexTxtBox_GotFocus
' MSHFlexGrid_Click <<--------------- 暂没有使用.xxx <-- 位置不对
'
'
' 以上如只使用第(2)与第(4)的顺序, 因此这时 MSHFlexGrid已经是lostFocus的状态,
' 执行第(2)时, 进行判断将认为是 isGridFocus & isTextFocus 都为 false , 对程序来说是意味着 是真正的lostFocus
' 而用户实际上还是在编辑Grid, 也就是程序判断出错.
'-------------------------------------------------------------------
' 目前解决的关键, 是使用以下的MSHFlexGrid_EnterCell(), 原因是:
' 它优先于 FlexTxtBox_lostFocus 先执行.
'-------------------------------------------------------------------
' 在 FlexTxtBox_Validate 中:
' grid.MSHFlexGrid.row & grid.MSHFlexGrid.col 的值, 一般不进行修改.
' 否则, 如果修改了, 记住: (本函数)grid.MSHFlexGrid_EnterCell 将不会被执行.
'-------------------------------------------------------------------
' 2012-2-23 测试结果
' 1)当前位置:第2行,第1列;点击第0行,第1列,经过如下:
' FlexTxtBox_Validate
' MSHFlexGrid_LeaveCell
' MSHFlexGrid_EnterCell
' MSHFlexGrid_MouseDown
' MSHFlexGrid_Click
' 2)当前位置:第1行,第1列;点击第0行,第1列,经过如下:
' FlexTxtBox_Validate
' MSHFlexGrid_MouseDown
' MSHFlexGrid_Click

posted on 2012-12-18 11:16  瓜西西  阅读(204)  评论(0编辑  收藏  举报