1、vsflexgrid可不可以像datagrid一样,用户可以选择单元格的内容进行复制,但又不能修改单元格的内容? 
用弹出菜单来处理,在选中的单元格后弹出一个菜单来,在弹出菜单的过程中将选中单元格的文本信息复制到 剪切板上就可实现复制 了

解决方案 »

  1.   


    '复制
    和楼上说的一样,但是VSFlexGrid的选择格式必须是下面的才可以使用右键菜单,也就是整行选择
    .SelectionMode = flexSelectionListBox
    用过类似的代码写到商用去了,但是一直不太放心 - - 自己感觉的缺点:
    1.整行选择,整行会随着选择而变色
    2.多单元格复制时,必须要用分隔符
    3.因为加了菜单,所以有时会覆盖MDI主窗体的菜单'换行
    Private Sub VSFlexGrid1_KeyUp(KeyCode As Integer, Shift As Integer)
            With Me.VSFlexGrid1
                If KeyCode = 13 Then
                    .Row = .Row + 1
                End If
            End With
    End Sub
    '不要用这个换行,因为焦点移至他处可能会产生bug
    Private Sub VSFlexGrid1_ValidateEdit(ByVal Row As Long, ByVal Col As Long, Cancel As Boolean)
            With Me.VSFlexGrid1
                    .Row = .Row + 1
            End With
    End Sub
      

  2.   

    谢谢!
    我所谓的换行指的不是row,而是单元格内部文字的换行,vsflexgrid按回车后无法让文字换行的。
    我现在只能采用点击单元格显示textbox的方式来解决。很奇怪为什么这两个功能datagrid都有,vsflexgrid会没有呢,郁闷
      

  3.   


    '保存的时候别忘了如何考虑回车符,会有瞬间闪烁的现象,不知道那些老大们有没有办法避免的.
    Private Sub fg_KeyUp(KeyCode As Integer, Shift As Integer)
            With fg
                If KeyCode = 13 Then
                    .TextMatrix(.Row, .Col) = .TextMatrix(.Row, .Col) & vbCrLf
                    .EditCell
                    SendKeys "{Right}"
                End If
            End With
    End Sub
      

  4.   

    谢谢AisaC,按您的代码回车后换了两行呢
      

  5.   

    直接在vsflexgrid单元格编辑的时候,只要按Shift+Enter也会换行的
      

  6.   

    楼主所说的这些vsflexgrid都可以实现的
      

  7.   

    我觉得第一个问题最好的处理就是如下:
    先设置VSFLEXGRID的属性中Editable = flexEDKbdMouse在VSFLEXGRID的事件中
    Private Sub vsflexgrid_KeyPressEdit(ByVal Row As Long, ByVal Col As Long, KeyAscii As Integer)
       keyascii=0
    End Sub这样处理后,可以复制内容,但不能修改单元格中的信息