MSFlexGrid编辑VB6

MSFlexGrid编辑VB6,vb6,msflexgrid,Vb6,Msflexgrid,目前我正在开发vb6应用程序。我想在MSFlexgrid中显示数据,但MSFlexgrid控件中没有编辑功能 有办法编辑MSFlexgrid吗?有办法使用隐藏文本框。在双击单元格时,文本框将可见,并且可以进行编辑。这里是代码段,请检查它 Private Sub Form_Load() 'Setting Col And row MSFlexGrid1.Cols = 3 MSFlexGrid1.Rows = 10 'First row MSFlexGrid1

目前我正在开发vb6应用程序。我想在MSFlexgrid中显示数据,但MSFlexgrid控件中没有编辑功能


有办法编辑MSFlexgrid吗?

有办法使用隐藏文本框。在双击单元格时,文本框将可见,并且可以进行编辑。这里是代码段,请检查它

Private Sub Form_Load()

   'Setting Col And row

    MSFlexGrid1.Cols = 3
    MSFlexGrid1.Rows = 10
    'First row
    MSFlexGrid1.TextMatrix(0, 0) = "ID"
    MSFlexGrid1.TextMatrix(0, 1) = "Date"
    MSFlexGrid1.TextMatrix(0, 2) = "Voucher Type"
    'some data
    MSFlexGrid1.TextMatrix(1, 0) = "E0000001"
    MSFlexGrid1.TextMatrix(2, 0) = "E0000001"
    MSFlexGrid1.TextMatrix(1, 1) = "01/04/10"
    MSFlexGrid1.TextMatrix(2, 1) = "01/04/10"    
    MSFlexGrid1.TextMatrix(1, 2) = "Jrnl"
    MSFlexGrid1.TextMatrix(2, 2) = "Jrnl"
End Sub

Private Sub MSFlexGrid1_DblClick()

    'If MSFlexGrid1.Col = 3 Or MSFlexGrid1.Col = 6 Or MSFlexGrid1.Col = 7 Then
        GridEdit Asc(" ")
    'End If
End Sub

Private Sub MSFlexGrid1_KeyPress(KeyAscii As Integer)

        GridEdit KeyAscii

End Sub

Sub GridEdit(KeyAscii As Integer)

  'use correct font  
  Text1.FontName = MSFlexGrid1.FontName
  Text1.FontSize = MSFlexGrid1.FontSize

  Select Case KeyAscii

     Case 0 To Asc(" ")
        Text1 = MSFlexGrid1
        Text1.text = Trim(Text1.text)
        Text1.SelStart = 1000

     Case Else
         Text1 = MSFlexGrid1
         Text1.text = Trim(Text1.text)
        Text1.SelStart = 1000

 End Select

  'position the edit box


  Text1.Left = MSFlexGrid1.CellLeft + MSFlexGrid1.Left

  Text1.Top = MSFlexGrid1.CellTop + MSFlexGrid1.Top

  Text1.Width = MSFlexGrid1.CellWidth

  Text1.Height = MSFlexGrid1.CellHeight

  Text1.Visible = True

  Text1.SetFocus

End Sub

Private Sub MSFlexGrid1_LeaveCell()

  If Text1.Visible Then

    If MSFlexGrid1.Col = 6 Or MSFlexGrid1.Col = 7 Then
        If Text1.text = "" Then
            Text1.text = " "
        End If
    End If
     MSFlexGrid1 = Text1
     Text1.Visible = False

  End If

End Sub

Private Sub MSFlexGrid1_GotFocus()

  If Text1.Visible Then

    If MSFlexGrid1.Col = 6 Or MSFlexGrid1.Col = 7 Then

        If Text1.text = "" Then
            Text1.text = " "
        End If

    End If

     MSFlexGrid1 = Text1.text
     Text1.Visible = False

  End If

End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)

  'noise suppression

  If MSFlexGrid1.Col <> 6 And MSFlexGrid1.Col <> 7 Then

    KeyAscii = 0

  End If

  If KeyAscii = vbKeyReturn Then

    KeyAscii = 0

  End If

End Sub
Private子表单_Load()
“设置列和列
MSFlexGrid1.Cols=3
MSFlexGrid1.Rows=10
“第一排
MSFlexGrid1.TextMatrix(0,0)=“ID”
MSFlexGrid1.TextMatrix(0,1)=“日期”
MSFlexGrid1.TextMatrix(0,2)=“凭证类型”
"一些数据,
MSFlexGrid1.TextMatrix(1,0)=“E0000001”
MSFlexGrid1.TextMatrix(2,0)=“E0000001”
MSFlexGrid1.TextMatrix(1,1)=“01/04/10”
MSFlexGrid1.TextMatrix(2,1)=“01/04/10”
MSFlexGrid1.TextMatrix(1,2)=“Jrnl”
MSFlexGrid1.TextMatrix(2,2)=“Jrnl”
端接头
私有子MSFlexGrid1_DblClick()
'如果MSFlexGrid1.Col=3或MSFlexGrid1.Col=6或MSFlexGrid1.Col=7,则
GridEdit Asc(“”)
"完"
端接头
专用子MSFLEXGRID1U按键(KEYSCII为整数)
GridEdit关键字ASCII
端接头
子网格编辑(keyscii作为整数)
'使用正确的字体
Text1.FontName=MSFlexGrid1.FontName
Text1.FontSize=MSFlexGrid1.FontSize
选择大小写键ASCII
案例0至Asc(“”)
Text1=MSFlexGrid1
Text1.text=修剪(Text1.text)
Text1.SelStart=1000
其他情况
Text1=MSFlexGrid1
Text1.text=修剪(Text1.text)
Text1.SelStart=1000
结束选择
'定位编辑框
Text1.Left=MSFlexGrid1.celllleft+MSFlexGrid1.Left
Text1.Top=MSFlexGrid1.CellTop+MSFlexGrid1.Top
Text1.Width=MSFlexGrid1.CellWidth
Text1.Height=MSFlexGrid1.CellHeight
Text1.Visible=True
Text1.SetFocus
端接头
私有子MSFlexGrid1_LeaveCell()
如果Text1.可见,则
如果MSFlexGrid1.Col=6或MSFlexGrid1.Col=7,则
如果Text1.text=”“,则
Text1.text=“”
如果结束
如果结束
MSFlexGrid1=Text1
Text1.Visible=False
如果结束
端接头
私有子MSFlexGrid1_GotFocus()
如果Text1.可见,则
如果MSFlexGrid1.Col=6或MSFlexGrid1.Col=7,则
如果Text1.text=”“,则
Text1.text=“”
如果结束
如果结束
MSFlexGrid1=Text1.text
Text1.Visible=False
如果结束
端接头
专用子文本1\u按键(KEYSCII为整数)
噪声抑制
如果MSFlexGrid1.Col 6和MSFlexGrid1.Col 7,则
KeyAscii=0
如果结束
如果KeyAscii=vbKeyReturn,则
KeyAscii=0
如果结束
端接头

您也可以尝试下面的代码。这不需要文本框

'Put this code in MSFlexGrid Keypress Event

'===================================================
Private Sub MSFlexGrid_KeyPress(KeyAscii As Integer)
With MSFlexGrid
    Select Case KeyAscii

        Case 8: 'IF KEY IS BACKSPACE THEN
            If .Text <> "" Then .Text = _
             Left$(.Text, (Len(.Text) - 1))
        Case 13: 'IF KEY IS ENTER THEN
            Select Case .Col
                Case Is < (.Cols - 1):
                    SendKeys "{right}"
                Case (.Cols - 1):
                    If (.Row + 1) = .Rows Then
                        .Rows = .Rows + 1
                    End If
                    SendKeys "{home}" + "{down}"
            End Select
        Case Else
            .Text = .Text + Chr$(KeyAscii)
            'write your own keyascii Validations under 
                   'commented lines
            Select Case .Col
                Case 0, 1, 2:
                    'if (your condition(s)) then
                        'accept only charectors
                    'Else
                    '   keyascii=0
                    'End If
                Case Else:
            End Select
    End Select
End With


End Sub
“将此代码放入MSFlexGrid按键事件中”
'===================================================
专用子MSFlexGrid_按键(KEYSCII为整数)
使用MSFlexGrid
选择大小写键ASCII
案例8:“如果键是BACKSPACE,则
如果.Text“”则.Text=_
左$(.Text,(Len(.Text)-1))
案例13:“如果键为ENTER,则
选择Case.Col
案例<(.Cols-1):
SendKeys“{right}”
案例(.Cols-1):
如果(.Row+1)=行,则
.Rows=.Rows+1
如果结束
发送键“{home}”+“{down}”
结束选择
其他情况
.Text=.Text+Chr$(keyscii)
'在下面编写您自己的keyascii验证
”他说
选择Case.Col
案例0、1、2:
“如果(你的情况))那么
“只接受charectors
”“否则呢
'keyscii=0
"完"
其他情况:
结束选择
结束选择
以
端接头

很抱歉以错误的方式输入代码。如果有人想用向上箭头键导航光标,那么下次一定要小心。如果你能以某种方式显示哪个单元格有焦点,那就太好了。旧的VB5 carryover MSFlexGrid和改进的VB6 MSHFlexgrid都是“显示”控件,不提供任何用户数据输入或编辑功能。您必须编写代码,在单元格被“编辑”时,在单元格上“浮动”一个选框文本框或者改为使用旧的DBGrid或更新的DataGrid控件。这是否解决了表单上的选项卡问题?我已停止了除MSFlexgrid之外的所有选项卡,并已在tab键上编写了所需的代码。我在第二个If块中添加了
调用MSFlexGrid1_LeaveCell
,因此编辑模式保持按下状态返回键。在
Text1\u LostFocus
中也做了同样的操作。