【问题标题】:Flex grid non editable columnFlex 网格不可编辑列
【发布时间】:2012-02-10 15:52:07
【问题描述】:

我不想编辑 flex gird 中的某些列。

Flex Grid

column1, column2, .... column35

我想从第 1 列编辑... 仅第 10 列,其余列我不想编辑或键入。

如何在vb6中做。

【问题讨论】:

  • 请提供更多信息、示例代码等...

标签: vb6


【解决方案1】:

我相信 MS Flex Grid 是为显示数据而非编辑而设计的。如果您需要编辑单元格数据,您可以使用 Flex Grid 完成它,使用在运行时叠加文本框的方法来捕获用户数据输入并在代码中设置单元格的“文本”属性。否则,您可以选择使用不同的控件。

以下是上述方法的一些示例:

http://support.microsoft.com/kb/241355

http://www.vb-helper.com/howto_edit_flexgrid_control.html

【讨论】:

    【解决方案2】:

    我在 VB6 中为可编辑网格制作了一个特殊的用户控件。如果你需要,我可以给你发一份。

    我用来编辑单元格的代码如下:

    Private Sub fg_KeyDown(KeyCode As Integer, Shift As Integer)
        Dim Cancel As Boolean
        Dim Idc As Long
        Dim x
    
        If KeyCode = vbKeyEscape And Shift = 0 Then
            If Not fgLocked Then
                If fgRowChanged Then
                    RaiseEvent BeforeRestoreBuffer
                    For Idc = 1 To UBound(fgBuffer)
                        x = fgBuffer(Idc)
                        fgValues(Idc, fg.Row) = x
                        If fgColFormat(Idc) = "*" And fgBuffer(Idc) <> "" Then
                            fg.TextMatrix(fg.Row, Idc) = "*******"
                        ElseIf fgColFormat(Idc) = "RTF" Then
                            fg.TextMatrix(fg.Row, Idc) = Format(fgBuffer(Idc), "")
                        Else
                            fg.TextMatrix(fg.Row, Idc) = Format(fgBuffer(Idc), fgColFormat(Idc))
                        End If
                    Next
                    fgRowChanged = False
                    RaiseEvent RestoreBuffer
                End If
            End If
        ElseIf KeyCode = vbKeyReturn And Shift = 0 Then
            NextCell
        ElseIf KeyCode = vbKeyF2 And Shift = 0 Then
            If Not fgLocked Then
                If fgColFormat(fg.Col) = "RTF" Then
                    CellEditBig fgValues(fg.Col, fg.Row)
                Else
                    CellEdit fgValues(fg.Col, fg.Row)
                End If
            End If
        ElseIf KeyCode = vbKeyF2 And Shift = vbShiftMask Then
            If Not fgLocked Then
                CellEditBig fgValues(fg.Col, fg.Row)
            End If
        ElseIf KeyCode = vbKeyDelete And Shift = 0 Then
            If Not fgLocked Then
                RaiseEvent BeforeDelete(Cancel)
                If Not Cancel Then
                    If fg.Rows = fg.FixedRows + 1 Then
                        fg.AddItem ""
                        If fgRowNumber Then fg.TextMatrix(fg.Rows - 1, 0) = fg.Rows - 1
                        fgValues_AddItem ""
                    End If
                    fg.RemoveItem fg.Row
                    If fgRowNumber Then Renumera
                    fgValues_RemoveItem fg.Row
                    LoadBuffer fg.Row
                    RaiseEvent AfterDelete
                End If
            End If
        ElseIf KeyCode = vbKeyInsert And Shift = 0 Then
            If Not fgLocked Then
                RaiseEvent BeforeInsert(Cancel)
                If Not Cancel Then
                    fg.AddItem "", fg.Row
                    If fgRowNumber Then Renumera
                    fgValues_AddItem "", fg.Row
                    RaiseEvent AfterInsert
                End If
            End If
        Else
            RaiseEvent KeyDown(KeyCode, Shift)
        End If
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-24
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      相关资源
      最近更新 更多