正文

加强型的msflexgrid22005-07-22 13:09:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/leafage/3083.html

分享到:

'以下在Form需一个MSFlexGrid, 一个TextBox
Option Explicit
Private OldText As String
Private ColSelect() As Boolean
Private SaveCellBkColor As Long
Private Sub Form_Load()
Text1.Visible = False
Me.Show
With MSFlexGrid1
     .Cols = 5
     .Rows = 15
     ReDim ColSelect(1 To .Cols - 1)
     SaveCellBkColor = .CellBackColor
     Call InitGrid
     .AllowBigSelection = True
     .FillStyle = flexFillRepeat
     '.AllowUserResizing = True  '请事先设好
End With
End Sub

Private Sub InitGrid()
Dim i As Long
With MSFlexGrid1
  .Row = 0
  For i = 1 To .Cols - 1
      .Col = i: .Text = "Col" + Format(i, "00") '若Cols超出99,则修改Format
  Next                        '的格式
End With
With MSFlexGrid1
  .Col = 0
  For i = 1 To .Rows - 1
      .Row = i: .Text = i
  Next
End With
'Dim width5 As Long
'With MSFlexGrid1
'     width5 = .Width \ .Cols
'    For i = 0 To .Cols - 1
'         .ColWidth(i) = width5
'     Next
'End With
End Sub
Private Sub MSFlexGrid1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim inMostLeft As Boolean
Dim inMostTop As Boolean

Call ProcMultiColSel(Shift)
With MSFlexGrid1
     If Button = vbKeyRButton Then
    '按mouse 右键且位於最上列/最左行则是更动title
    If .MouseCol = 0 Or .MouseRow = 0 Then
       Call toEditGrid(.MouseCol, .MouseRow)
    End If
     Else
    If Button = vbKeyLButton Then
       If .ColSel = .Col And .RowSel = .Row Then
       '表示没有多个栏位的选取,这时才真正是可以输入
         Call toEditGrid(.Col, .Row)
       End If
    End If
     End If
End With
End Sub
Private Sub MSFlexGrid1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyReturn And Not Text1.Visible Then
   With MSFlexGrid1
    Call toEditGrid(.Col, .Row)
   End With
End If
End Sub
'TextBox上的输入反映到MsFlexGrid上
Private Sub Text1_Change()
MSFlexGrid1.Text = Text1.Text
End Sub
'按下Down/Up 时结束TextBox的Keyin
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyUp Then
   Text1.Visible = False
   MSFlexGrid1.SetFocus
   SendKeys "{up}"
Else
  If KeyCode = vbKeyDown Then
     Text1.Visible = False
     MSFlexGrid1.SetFocus
     SendKeys "{down}"
  End If
End If
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
   KeyAscii = 0
   Text1.Visible = False
   MSFlexGrid1.SetFocus
End If
If KeyAscii = vbKeyEscape Then
   KeyAscii = 0
   MSFlexGrid1.Text = OldText
   Text1.Visible = False
   MSFlexGrid1.SetFocus
End If
End Sub

Private Sub Text1_LostFocus()
Text1.Visible = False
End Sub
'设定TextBox於MSFlexGrid1的Current Cell上
Private Sub toEditGrid(ByVal C As Integer, ByVal R As Integer)
With MSFlexGrid1
   .Col = C: .Row = R
   Text1.Left = .Left + .ColPos(C)
   Text1.Top = .Top + .RowPos(R)
   If .Appearance = flex3D Then
      Text1.Left = Text1.Left + 2 * Screen.TwipsPerPixelX
      Text1.Top = Text1.Top + 2 * Screen.TwipsPerPixelY
   End If
   Text1.Width = .ColWidth(C)
   Text1.Height = .RowHeight(R)
   Text1.Text = .Text
   OldText = .Text
End With
Text1.Visible = True
Text1.SelStart = Len(Text1.Text)
Text1.SetFocus
End Sub

阅读(3354) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册