shift只能选中相邻行啊!在线等待,立即给分

解决方案 »

  1.   

    只能虚拟.
    在MSHFLEXGRID中多做一列.列宽为0.只记录选择标志.
    当选择时该列置1.再单击时置0.
    应用时只要检查为1列即可.
      

  2.   

    用Ctrl选中不相邻的行用数组可以进行记录操作,但在界面上不好表面,无法实现背景色显示为蓝色的情况只能用 MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 0)的方法来获取选中的行号
      

  3.   

    例如这个网格-字典的例子:'声明字典
    Dim dicA As New Scripting.Dictionary
    Private Sub Command1_Click()
        Dim intI As Integer
    '为字典赋网格数据值
        For intI = MSFlexGrid1.FixedRows To MSFlexGrid1.Rows - 1
            dicA.Add MSFlexGrid1.TextMatrix(intI, 1), _
                     MSFlexGrid1.TextMatrix(intI, 2)
        Next intI
    '在立即窗口打印赋值结果
        Debug.Print "主题词", "数值"
        For Each Key In dicA.Keys
            Debug.Print Key, dicA(Key)
        Next
    End Sub'保存文件
    Private Sub Command2_Click()
        Dim strFileName As String
    '选择网格区域,从左上角到右下角的全部区域
        MSFlexGrid1.Row = 1                 '左上角的行
        MSFlexGrid1.Col = 1                 '左上角的列
        MSFlexGrid1.RowSel = 10             '右下角的行
        MSFlexGrid1.ColSel = 2              '右下角的列
    '将选定的网格数据送入剪贴板
        Clipboard.SetText MSFlexGrid1.Clip
        strFileName = InputBox("键入路径和文件名")
        Open strFileName For Output As #1
    '将剪贴板中的数据写入文件
        Write #1, MSFlexGrid1.Clip
        Close #1
    End Sub'打开已有文件,读文件
    Private Sub Command3_Click()
        Dim intL As Integer, intI As Integer
        Dim strFileName As String
        Dim strA As String, strB(1) As String
        strFileName = InputBox("键入路径和文件名")
    '打开文件
        Open strFileName For Input As #1
    '读文件
        Do While Not EOF(1)
            intL = intL + 1
            Input #1, strB(intL)
        Loop
    '关闭文件
        Close #1
        For intI = 1 To intL
            strA = strA & strB(intI)
        Next intI
    '将读入的文件送到剪贴板
        Clipboard.SetText strA
    '选择网格区域,从左上角到右下角的全部区域
        MSFlexGrid1.Row = 1
        MSFlexGrid1.Col = 1
        MSFlexGrid1.RowSel = 10
        MSFlexGrid1.ColSel = 2
    '将剪贴板的数值粘贴到网格
        MSFlexGrid1.Clip = Clipboard.GetText
    End SubPrivate Sub Command4_Click()
        Unload Me
    End SubPrivate Sub Command5_Click()
        'MsgBox MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 0)
        MSFlexGrid1.RowExpanded = False
        
        MSFlexGrid1.SelectionMode = flexSelectionFree
    End SubPrivate Sub Form_Load()
        Dim intI As Integer
    '设定网格的行数和列数
        MSFlexGrid1.Cols = 3            '序号(固定列)+主题词+数值共3列
        MSFlexGrid1.Rows = 11           '固定行+10个村庄共11行
    '建立说明列
    '属性MSFlexGrid1.FixedRows可设置或返回固定行总数,缺省为1
    '属性MSFlexGrid1.TextArray可设置或返回网格文本的内容
        For intI = MSFlexGrid1.FixedRows To MSFlexGrid1.Rows - 1
            MSFlexGrid1.TextArray(MSFlexGrid1.Cols * intI) = intI
        Next intI
    '建立说明行
    '属性MSFlexGrid1.FixedCols可设置或返回固定列总数,缺省为1
        For intI = MSFlexGrid1.FixedCols To MSFlexGrid1.Cols - 1
    '将单元格的宽度增加100twip
            MSFlexGrid1.ColWidth(intI) = MSFlexGrid1.ColWidth(intI) + 100
            MSFlexGrid1.TextArray(intI) = "项目" & intI
        Next intI
        MSFlexGrid1.Row = 1     '设定当前行
        MSFlexGrid1.Col = 1     '设定当前列
    '将文本框放入左上角的单元格中
        Text1.Move MSFlexGrid1.CellLeft + MSFlexGrid1.Left, _
            MSFlexGrid1.CellTop + MSFlexGrid1.Top, MSFlexGrid1.CellWidth, _
            MSFlexGrid1.CellHeight
        Label1 = "对象1:项目1"
    End Sub'用户选择编辑单元时,将该单元内容复制到文本框控件
    '然后可以进行编辑
    Private Sub MSFlexGrid1_EnterCell()
    '将当前说明列和当前说明行赋予标签
        Label1 = "对象" & MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 0) _
            & ":" & MSFlexGrid1.TextMatrix(0, MSFlexGrid1.Col)
    '将当前单元格内容赋予文本框
        Text1.Text = MSFlexGrid1.Text
    '    Text1.Visible = True
    '将文本框放入被单击的单元格中
        Text1.Move MSFlexGrid1.CellLeft + MSFlexGrid1.Left, _
            MSFlexGrid1.CellTop + MSFlexGrid1.Top, MSFlexGrid1.CellWidth, _
            MSFlexGrid1.CellHeight
        Text1.SetFocus          '文本框取得焦点
    '选中文本框内的全部字符,即将其涂成蓝色
        Text1.SelStart = 0
        Text1.SelLength = Len(Text1.Text)
    End Sub'文本框数据处理,按Enter键结束一个网格数据的录入
    Private Sub Text1_KeyPress(KeyAscii As Integer)
        Dim intRow As Integer, intCol As Integer
        If KeyAscii = 13 Then               '13为Enter键
            MSFlexGrid1.Text = Text1.Text   '文本框数据送入网格
            intRow = MSFlexGrid1.Row + 1    '焦点移到同列的下一个单元
            intCol = MSFlexGrid1.ColSel     '单元格返回当前列
            If intRow = MSFlexGrid1.Rows Then   '如果到了最后一行
                intRow = MSFlexGrid1.FixedCols  'intRow=1,FixedCols的缺省设置
    '如果intCol没有到边界列则取下一列
                If intCol < MSFlexGrid1.Cols - MSFlexGrid1.FixedCols Then _
                    intCol = intCol + 1
            End If
            MSFlexGrid1.Row = intRow        '新的当前行
            MSFlexGrid1.Col = intCol        '新的当前列
            MSFlexGrid1.RowSel = intRow     '为单元格设置的当前行
            Text1.Text = MSFlexGrid1.Text   '单元格数据赋予文本框
    '将文本框放入下一个单元格中
            Text1.Move MSFlexGrid1.CellLeft + MSFlexGrid1.Left, _
            MSFlexGrid1.CellTop + MSFlexGrid1.Top, MSFlexGrid1.CellWidth, _
                    MSFlexGrid1.CellHeight
            Text1.SetFocus                  '文本框取得焦点
        End If
    End Sub