1、MSHFlexGrid控件怎样才能让它只能选择一行,
而不能同时选择多行??
2、MSHFlexGrid控件设置了AllowUserResizing =flexResizeBoth 
怎样判断鼠标双击列尾(鼠标变成可移动列的时候)
就是像EXCEL一样双击两列时自动调整列宽

解决方案 »

  1.   

    MSHFlexGrid的右键属性里有个selecttionMode,选择为by row就是每次只选择一行.
      

  2.   

    可以参考http://blog.csdn.net/northwolves/archive/2004/09/02/92956.aspx
    Option Explicit
    Private Sub Form_Load()
    Dim i As Integer, j As Integer
    With MSHFlexGrid1
    .Rows = 10
    .Cols = 4
    For i = 1 To 9
    .TextMatrix(i, 0) = "第 " & i & " 行"
    For j = 1 To 3
    .TextMatrix(0, j) = "第 " & j & " 列"
    .TextMatrix(i, j) = i & "," & j
    Next
    Next
    .SelectionMode = flexSelectionByRow
    .BackColorSel = vbGreen
    .ForeColorSel = vbRed
    End With
    End Sub
    Private Sub MSHFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
        With MSHFlexGrid1
         .Row = .MouseRow
              .Col = 0
            .ColSel = .Cols - 1
        End With
    End Sub
      

  3.   

    第2问 可以在 MSHFlexGrid1_MouseDown 事件中判断鼠标所在列字符的最大宽度进行COLUMN WIDTH 设置.如果不好判断最长字符的需要宽度,可以辅助加载一个自适应宽度的LABEL控件,协助设置
      

  4.   

    MSHFlexGrid的selecttionMode已设了by row
    单击的时候是选择一行,
    但只要鼠标拖动也是可以选择多行的。
      

  5.   

    chemanellenguo(冷风)//
    是不是哪里整错了呀,我试验了northwolves(狼行天下)的代码,的确是你要求的效果
    ^_^
      

  6.   

    能实现,但是有抖动Private Sub MSHFlexGrid1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
    If MSHFlexGrid1.RowSel <> MSHFlexGrid1.Row Then MSHFlexGrid1.RowSel = MSHFlexGrid1.Row
    End Sub
      

  7.   

    自动调整列宽可以通过先获取网格中文本的宽度,然后对缇和字符进行宽度转换(1个字符的宽度=120缇,但实际测下来98比较合适;1个汉字差不多是字符的2倍,自己可以调试到合适的比例),大概方法参考以下代码:(假如双击,当然也可以在加载时直接调整)Private Sub MSHFlexGrid1_DblClick()
     
     Dim n, n1 As Integer
     n = Len(MSHFlexGrid1.TextMatrix(1, 1))  '第1行第1列网格中文本的宽度
     n1 = Len(MSHFlexGrid1.TextMatrix(1, 2))   '第2行第2列网格中文本的宽度MSHFlexGrid1.ColWidth(1) = n * 200  '当网格中为汉字时
    MSHFlexGrid1.ColWidth(2) = n1 * 98  '当网格中为字符时End Sub你可以通过循环先求出网格中各列的最大宽度,然后再进行设置