参考网址;
http://jpkc.wxit.edu.cn/vb/Wlkc/vb8/08-02-01.html
 
 
         MSFlexGrid控件的事件与方法 1、MSFlexGrid控件的事件 (1)KeyPress事件:当用户按下或释放任何一个ANSI键(字母或数字等键)时触发。 定义:Private Sub <控件名>_KeyPress(KeyAscii As Integer) 其中,形参KeyAscii用于将用户按下或释放的ANSI键值传送给KeyPress过程。 
  | 
  | 
![]()  | 
|   | 
![]()  | 
  | 
| 
 表8.2字母或数字键的KeyAscii代码、键值与含义 
 | 
| 
 (2)KeyDown事件:当用户按下一个键时触发。   定义:Private Sub <控件名>_KeyDown(KeyCode As Integer, Shift As Integer)    其中,形参KeyCode用于表示用户按键的类型,取值如表8.3所示。形参Shift用于表示用户所按组合键(Ctrl、Alt、Shilt)的键值,取值如表8.4所示。 
 | 
|   | 
![]()  | 
  | 
| 
 表8.3 形参KeyCode返回键值与按键键名的对应关系表 
 | 
![]()  | 
| 
 表8.4 Shift取值类型 
 | 
| 
 (3)KeyUp事件:当用户放开任何一个键时触发。 定义:Private Sub <控件名>_KeyUp(KeyCode As Integer, Shift As Integer) 其中参数KeyCode与Shift的取值见表8.3与表8.4。 (4)MouseDown事件:当用户按下鼠标触发。 定义:Private Sub <控件名>_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) 其中,形参Button表示用户按下的是鼠标左键、中键还是右键,取值如表8.5所示。 形参Shift取值类型见表8.4。x、y为鼠标光标在控件内的位置坐标,单位为缇。 
 | 
|   | 
![]()  | 
  | 
| 
 表8.5 Button取值类型 
 | 
| 
 (5)MouseUp事件:当用户放开鼠标时触发。    MouseUp事件处理过程的原型定义与MouseDown过程原型定义类似,此处不再叙述。 (6)EnterCell与LeaveCell事件:在进入一个单元格时触发EnterCell事件,在离开一个单元格时触发LeaveCell事件  。这两个事件过程均无参数。 2、MSFlexGrid控件的方法 (1)Clear方法:清除MSFlexGrid控件所有单元格中内容。   语句格式:MSFlexGrid.Clear (2)AddItem方法:在MSFlexGrid控件中添加一个新行。   语句格式:MSFlexGrid.AddItem(String,Index,Number)   String为新增行中的字符串,用Tab键作为一行中各单元格字符串的分隔符。   Index为新增行的行号,若省略则添加到最后一行。   Number为添加行的带区号。 (3)RemoveItem方法:在MSFlexGrid控件中删除一行。   语句格式:MSFlexGrid. RemoveItem (Index,Number)   Index为要删除行的行号。   Number为要删除行的带区号。   【例8.2】在MSFlexGrid控件上实现九九乘法表,并实现鼠标拖弋功能,即用鼠标拖动方法,将某单元格内容移动到另一个单元格中,或复制到另一个单元格中,如图8.4所示。 
 | 
|   | 
![]()  | 
  | 
| 图8.4 用MSFLexGrid控件实现九九乘法表 | 
| 
 设计步骤: 1、新建工程与窗体,在窗体上放置一个“退出”按钮、一个“计算九九乘法表”按钮和一个MSFlexGrid控件,设计步骤与属性设置演示:          观看视频 2、编写代码实现九九乘法表及鼠标拖弋功能 (1)定义全局变量 在窗体的通用与声明部分定义四个全局变量: Dim Cell As String, Ctrl As Boolean, Col As Long, Row As Long 其中:Cell:用于传送单元格内容;    Ctrl:用于判断是否按下“Ctrl”键;    Col,Row:用于记录原单元格行号与列号。 (2)编写“计算九九乘法表”命令按钮事件处理过程 双击“创建九九乘法表”按钮,编写如下事件处理过程。 Private Sub Command_Calculate_Click() Dim I As Integer, J As Integer With MSFlexGrid1   .Clear              ‘清除所有单元格内容   For J = 1 To 9    .TextMatrix(0, J) = J     ‘在第0行赋数字1~9  Next J  For I = 1 To 9   .TextMatrix(I, 0) = I      ‘在第0列赋数字1~9   For J = 1 To 9     .TextMatrix(I, J) = CStr(I) & "*" & CStr(J) & "=" & CStr(I * J)    ‘赋九九乘法表的内容   Next J  Next I End With End Sub (3)编写鼠标拖弋程序   在某单元格按下鼠标左键时,触发MouseDown事件处理过程,在该过程中将光标形状改为“flexArrow ”,并将该单元格内容存放在全局变量Cell中。   拖弋鼠标到另一个单元格,放开鼠标左键,触发MouseUp事件处理过程。在该过程中将光标形状恢复为“flexCross ”,并将全局变量Cell中内容赋给现单元格,另将前单元格内容删除。于是前单元格的内容被移动到后单元格中,从而实现鼠标的拖弋功能。   若按下“Ctrl”键拖动鼠标时,光标形状改为“flexHourglass”,松开鼠标后。前一个单元格的内容被复制到后一个单元格中。 ①键按下事件处理过程KeyDown   该过程用于判断是否按下“Ctrl”键。若按下“Ctrl”键则将全局变量Ctrl赋True值,表示用户按下了“Ctrl”键。Private Sub MSFlexGrid1_KeyDown(KeyCode As Integer, Shift As Integer)  If KeyCode = vbKeyControl Then   Ctrl = True  End If End Sub ②键松开事件处理过程KeyUp   该过程用于判断是否松开“Ctrl”键。若松开“Ctrl”键则将全局变量Ctrl赋Flase值,表示用户松开“Ctrl”键。 Private Sub MSFlexGrid1_KeyUp(KeyCode As Integer, Shift As Integer)  If KeyCode = vbKeyControl Then      ‘也可用Shift= vbCtrlMask作为松开Ctrl键的判断条件   Ctrl = False  End If End Sub ③鼠标按下事件处理过程MouseDown   在该过程中将光标形状改为“flexArrow ”,并将该单元格内容存放在全局变量Cell中,将单元格的行号与列号赋给全局变量Row与Col。 Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)  With MSFlexGrid1    Row = .MouseRow                ‘单元格的行号赋给Row    Col = .MouseCol                ‘单元格的列号赋给Col    Cell = .TextMatrix(.MouseRow, .MouseCol)   ‘单元格的内容赋给Cell   If Ctrl = False Then    .MousePointer = flexArrow           ‘若未按Ctrl键则光标为箭头形   Else    .MousePointer = flexHourglass         ‘若按下Ctrl键则光标为杯形   End If  End With End Sub ④鼠标松开事件处理过程MouseUp   在该事件中将Cell中内容赋给当前单元格,当Ctrl=False时清除行号、列号为Row与Col的原单元格内容,完成一次单元格内容的移动操作(Move);否则不清除原单元格内容完成一次复制操作(Copy),最后将光标恢复成“flexCross”(十字型)。 Private Sub MSFlexGrid1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single) With MSFlexGrid1  If Ctrl = Flase Then   .TextMatrix(Row, Col) = ""             ‘若未按Ctrl键则原单格清空    End If   .TextMatrix(.MouseRow, .MouseCol) = Cell     ‘将Cell中原单元格内容赋给当前单元格   .MousePointer = flexCross‘光标恢复十字型  End With End Sub 
 |