将MSFlexGrid做成可编辑,并且作成象数据库那样
帮忙吧,朋友

解决方案 »

  1.   

    Option Explicit
    Private miMSDRow    As Integer
    Private miMSDCol    As Integer
    Private miMSDRowSel As Integer
    Private miCol       As Integer
    Private Sub FlexGridInt()
        
        Dim i As Integer
        Me.MSFlexGrid.FixedAlignment(0) = flexAlignCenterCenter
        MSFlexGrid.ColAlignment(3) = flexAlignLeftCenter
        Me.MSFlexGrid.ColWidth(0) = 1500
        Me.MSFlexGrid.TextMatrix(0, 0) = "外注先"
        
        Me.MSFlexGrid.FixedAlignment(1) = flexAlignCenterCenter
        Me.MSFlexGrid.ColWidth(1) = 3000
        Me.MSFlexGrid.TextMatrix(0, 1) = "外注先名称"
        
        Me.MSFlexGrid.FixedAlignment(2) = flexAlignCenterCenter
        Me.MSFlexGrid.ColWidth(2) = 6375
        Me.MSFlexGrid.TextMatrix(0, 2) = "外注先フリカナ"
        
        
        Me.MSFlexGrid.FixedAlignment(3) = flexAlignCenterCenter
        Me.MSFlexGrid.ColWidth(3) = 2000
        Me.MSFlexGrid.TextMatrix(0, 3) = "外注処理フラッグ"
        
        For i = 0 To 88
            MSFlexGrid.TextMatrix(i, 0) = i & "000"
            MSFlexGrid.TextMatrix(i, 1) = i & "111"
            MSFlexGrid.TextMatrix(i, 2) = i & "222"
            MSFlexGrid.TextMatrix(i, 3) = i & "333"
        Next i
    '    Call ClickMsGrid(MSFlexGrid)
    End SubPrivate Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)If KeyCode = 38 Then
            KeyCode = 0
            If miMSDRow > 1 Then
                MSFlexGrid.Row = MSFlexGrid.Row - 1
                Call SetMSFlexGrid
            End If
        End If    If KeyCode = 40 Then
            KeyCode = 0
            If miMSDRow < 187 Then
                MSFlexGrid.Row = MSFlexGrid.Row + 1
                Call SetMSFlexGrid
            End If
        End If
        
        If KeyCode = vbKeyReturn Then
            Select Case Shift
            Case 0
                If MSFlexGrid.Col < MSFlexGrid.Cols - 1 Then
                    MSFlexGrid.Col = MSFlexGrid.Col + 1
                Else
                    If MSFlexGrid.RowSel <> MSFlexGrid.Rows - 1 Then
                        MSFlexGrid.Row = MSFlexGrid.Row + 1
                        MSFlexGrid.RowSel = MSFlexGrid.RowSel + 1
                        MSFlexGrid.Col = 0
                    End If
                End If
                MSFlexGrid.TextMatrix(miMSDRow, miMSDCol) = Combo1.Text
                Call SetMSFlexGrid
            Case 1
                If MSFlexGrid.Col <> 0 Then
                    MSFlexGrid.Col = MSFlexGrid.Col - 1
                Else
                    If MSFlexGrid.RowSel <> 1 Then
                        MSFlexGrid.Row = MSFlexGrid.Row - 1
                        MSFlexGrid.RowSel = MSFlexGrid.RowSel - 1
                        MSFlexGrid.Col = MSFlexGrid.Cols - 1
                    End If
                End If
                MSFlexGrid.TextMatrix(miMSDRow, miMSDCol) = Combo1.Text
                Call SetMSFlexGrid
            End Select
        End If
        
    End SubPrivate Sub Combo1_LostFocus()
        Combo1.Visible = False
        miCol = -1
    End SubPrivate Sub Command1_Click()
    Dim i As Integer
    i = CheckStrSize(Text3.Text)
    End SubPrivate Sub Form_Load()
        FlexGridInt
    End SubPrivate Sub MSFlexGrid_Click()
        Call SetMSFlexGrid
    End SubPrivate Sub SetMSFlexGrid()    If MSFlexGrid.Row <> Me.MSFlexGrid.RowSel Then
            Exit Sub
        End If
        
        miMSDCol = MSFlexGrid.Col
        miMSDRow = MSFlexGrid.Row
        miMSDRowSel = Me.MSFlexGrid.RowSel
        
        Select Case miMSDCol
            Case 0
    '            Text1.Visible = False
                Text1.Top = MSFlexGrid.CellTop + MSFlexGrid.Top
                Text1.Left = MSFlexGrid.CellLeft + MSFlexGrid.Left
                Text1.Width = MSFlexGrid.CellWidth
                Text1.Height = MSFlexGrid.CellHeight
                Text1.Text = MSFlexGrid.TextMatrix(miMSDRow, miMSDCol)
                Text1.Tag = miMSDCol & "," & "c"
                Text1.Visible = True
                miCol = 0
                Text1.SetFocus
            Case 1
    '            Text1.Visible = False
                Text1.Top = MSFlexGrid.CellTop + MSFlexGrid.Top
                Text1.Left = MSFlexGrid.CellLeft + MSFlexGrid.Left
                Text1.Width = MSFlexGrid.CellWidth
                Text1.Height = MSFlexGrid.CellHeight
                Text1.Text = MSFlexGrid.TextMatrix(miMSDRow, miMSDCol)
                Text1.Tag = miMSDCol & "," & "c"
                Text1.Visible = True
                miCol = 1
                Text1.SetFocus
            Case 2
    '            Text1.Visible = False
                Combo1.Top = MSFlexGrid.CellTop + MSFlexGrid.Top
                Combo1.Left = MSFlexGrid.CellLeft + MSFlexGrid.Left
                Combo1.Width = MSFlexGrid.CellWidth
                Combo1.Text = MSFlexGrid.TextMatrix(miMSDRow, miMSDCol)
                Combo1.Visible = True
                miCol = 2
                Combo1.SetFocus
            Case 3
    '            Text1.Visible = False
                Text1.Top = MSFlexGrid.CellTop + MSFlexGrid.Top
                Text1.Left = MSFlexGrid.CellLeft + MSFlexGrid.Left
                Text1.Width = MSFlexGrid.CellWidth
                Text1.Height = MSFlexGrid.CellHeight
                Text1.Text = MSFlexGrid.TextMatrix(miMSDRow, miMSDCol)
                Text1.Tag = miMSDCol & "," & "c"
                Text1.Visible = True
                miCol = 3
                Text1.SetFocus
        End Select
        
    End Sub
      

  2.   

    Private Sub MSFlexGrid_Scroll()    If MSFlexGrid.TopRow <= MSFlexGrid.Row And MSFlexGrid.Row - 16 < MSFlexGrid.TopRow Then
            If Text1.Visible = True Then
                If miMSDCol = 3 Or miMSDCol = 1 Or miMSDCol = 0 Then
                    Text1.Top = MSFlexGrid.CellTop + MSFlexGrid.Top
                    Text1.Left = MSFlexGrid.CellLeft + MSFlexGrid.Left
                    Text1.Width = MSFlexGrid.CellWidth
                    Text1.Height = MSFlexGrid.CellHeight
                    Text1.Text = MSFlexGrid.TextMatrix(miMSDRow, miMSDCol)
                    Text1.Visible = True
                    Text1.SetFocus
                End If
            End If
            Select Case miCol
            Case 0, 1, 3
            If Text1.Visible = False Then
                Text1.Visible = True
                Text1.SetFocus
                Exit Sub
            End If
            Case 2
            If Combo1.Visible = False Then
                Combo1.Visible = True
                Combo1.SetFocus
                Exit Sub
            End If
            End Select
        Else
            If Text1.Visible = True Then
                MSFlexGrid.TextMatrix(miMSDRow, miMSDCol) = Text1.Text
                Text1.Visible = False
            End If
            If Combo1.Visible = True Then
                MSFlexGrid.TextMatrix(miMSDRow, miMSDCol) = Combo1.Text
                Combo1.Visible = False
            End If
        End If
        
    End SubPrivate Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)    If KeyCode = 38 Then
            KeyCode = 0
            If miMSDRow > 1 Then
                MSFlexGrid.Row = MSFlexGrid.Row - 1
                Call SetMSFlexGrid
            End If
        End If    If KeyCode = 40 Then
            KeyCode = 0
            If miMSDRow < 187 Then
                MSFlexGrid.Row = MSFlexGrid.Row + 1
                Call SetMSFlexGrid
            End If
        End If
        
        If KeyCode = vbKeyReturn Then
            Select Case Shift
            Case 0
                If MSFlexGrid.Col < MSFlexGrid.Cols - 1 Then
                    MSFlexGrid.Col = MSFlexGrid.Col + 1
                Else
                    If MSFlexGrid.RowSel <> MSFlexGrid.Rows - 1 Then
                        MSFlexGrid.Row = MSFlexGrid.Row + 1
                        MSFlexGrid.RowSel = MSFlexGrid.RowSel + 1
                        MSFlexGrid.Col = 0
                    End If
                End If
                MSFlexGrid.TextMatrix(miMSDRow, miMSDCol) = Text1.Text
                Call SetMSFlexGrid
            Case 1
                If MSFlexGrid.Col <> 0 Then
                    MSFlexGrid.Col = MSFlexGrid.Col - 1
                Else
                    If MSFlexGrid.RowSel <> 1 Then
                        MSFlexGrid.Row = MSFlexGrid.Row - 1
                        MSFlexGrid.RowSel = MSFlexGrid.RowSel - 1
                        MSFlexGrid.Col = MSFlexGrid.Cols - 1
                    End If
                End If
                MSFlexGrid.TextMatrix(miMSDRow, miMSDCol) = Text1.Text
                Call SetMSFlexGrid
            End Select
        End If
        
    End SubPrivate Sub Text1_LostFocus()
        Text1.Visible = False
        miCol = -1
    End SubPrivate Sub Text1_Validate(Cancel As Boolean)
        MSFlexGrid.TextMatrix(miMSDRow, miMSDCol) = Text1.Text
    End SubPrivate Sub Text2_KeyDown(KeyCode As Integer, Shift As Integer)
        If KeyCode = 38 Or KeyCode = 40 Then
            Call SetMsGrid(MSFlexGrid, KeyCode)
        End If
    End Sub
      

  3.   

    建议你用VSFlexGrid或FlexCell,MSFlexGrid的功能实在有限
      

  4.   


    czwwh 
    VSFlexGrid只能得到试用版,怎么能给客户
      

  5.   

    我给你一个控件,肯定能完成你想要的功能.该MSHFLEXGRID扩展控件,可以完成对MSHFLEXGRID的编辑,保存,打开,连接CNN,打开RS,添加行,添加列,删除行,删除列,查找/替换,计算表达式,格式化内容,指定默认值等等....
      

  6.   

    我在线等哦
    czwwh你有 
    VSFlexGrid的完整版,
    可以发给我
    mail:[email protected]
      

  7.   

    MSTOP你好
    我的
    mail:[email protected]
      

  8.   

    Option Explicit'  初始化界面
    Private Sub Form_Load()
        Dim i As Integer
        With MSFlexGrid1
            .Cols = 6
            .Rows = 10
            For i = 0 To 9
                .RowHeight(i) = 300
            Next i
            .TextMatrix(0, 0) = "学号\科目"
            .TextMatrix(0, 1) = "数学"
            .TextMatrix(0, 2) = "语文"
            .TextMatrix(0, 3) = "英语"
            .TextMatrix(0, 4) = "政治"
            .TextMatrix(0, 5) = "历史"
            .TextMatrix(1, 0) = "0201001"
            .TextMatrix(2, 0) = "0201002"
            .TextMatrix(3, 0) = "0201003"
            .TextMatrix(4, 0) = "0201004"
            .TextMatrix(5, 0) = "0201005"
            .TextMatrix(6, 0) = "0201006"
            .TextMatrix(7, 0) = "0201007"
            .TextMatrix(8, 0) = "0201008"
            .TextMatrix(9, 0) = "0201009"
        End With
        Label1.Caption = "在选中项双击或单击回车输入成绩,完毕按回车,分数输入MSFlexGrid" & vbCr & _
                         "而按下Esc键则取消输入..."
    End Sub'  双击表格时,显示文本框用于输入
    Private Sub MSFlexGrid1_DblClick()
        Dim c As Integer, r As Integer
        With MSFlexGrid1
            c = .Col: r = .Row
                Text1.Left = .Left + .ColPos(c)
                Text1.Top = .Top + .RowPos(r)
                Text1.Width = .ColWidth(c)
                Text1.Height = .RowHeight(r)
                Text1 = .Text
                Text1.Visible = True
                Text1.SetFocus
        End With
    End Sub'  单击回车键时,实现和双击鼠标相同的处理
    Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)
        If KeyAscii = vbKeyReturn Then
            Call MSFlexGrid1_DblClick
        End If
    End SubPrivate Sub Text1_KeyPress(KeyAscii As Integer)
        '  ESC取消输入
        If KeyAscii = vbKeyEscape Then
            Text1.Visible = False
            MSFlexGrid1.SetFocus
            Exit Sub
        End If
        '  回车确定输入
        If KeyAscii = vbKeyReturn Then
            MSFlexGrid1.Text = Text1.Text
            Text1.Visible = False
            MSFlexGrid1.SetFocus
        End If
    End SubPrivate Sub Text1_LostFocus()
        Text1.Visible = False
        MSFlexGrid1.SetFocus
    End Sub