资源描述
如何将选中的MSHFlexGrid一行高亮显示
高亮显示要设置颜色
Private Sub hflexgrid_EnterCell()
'单击某一单元时,改变该行颜色
Dim i_Col As Integer
Dim c_col As Integer
c_col = Hflexgrid.col
If c_col > 0 Then
For i_Col = 0 To Hflexgrid.Cols - 1
Hflexgrid.col = i_Col
Hflexgrid.CellBackColor = &HFFFFC0
Next i_Col
Hflexgrid.col = c_col
End If
End Sub
Private Sub hflexgrid_LeaveCell()
'当某一行失去焦点时,恢复该行颜色
Dim i_Col As Integer
Dim c_col As Integer
c_col = Hflexgrid.col
For i_Col = 0 To Hflexgrid.Cols - 1
Hflexgrid.col = i_Col
Hflexgrid.CellBackColor = vbWhite
Next i_Col
Hflexgrid.col = c_col
End Sub
mshflexgrid怎么改变某一行的背景色和字体颜色?
Private Sub setColor(msfg As MSFlexGrid, row As Long, color As Long, bkcolor As Long)
For i = 1 To msfg.Cols - 1
msfg.row = row
msfg.Col = i
msfg.CellForeColor = color '前景色
msfg.CellBackColor = bkcolor '背景色
Next
End Sub
Private Sub Command1_Click()
setColor MSFlexGrid1, 3, &HFFFF&, &H8000000D
End Sub
Private Sub Form_Load()
MSFlexGrid1.Rows = 5
MSFlexGrid1.Cols = 5
For i = 1 To 4
For j = 1 To 4
MSFlexGrid1.TextMatrix(i, j) = j
Next
Next
End Sub
让MSHFlexGrid只能被选中一行的另一方法
1、放置一个 HSB1 (HScrollBar) ,MSHFlexGrid1(MSHFlexGrid)
2、如下代码:
'---------------------------------------------------------
Private Sub Form_Load()
If MSHFlexGrid1.Cols then
HSB1.Min=1
HSB1.Max=MSHFlexGrid1.Cols
End If
End Sub
'---------------------------------------------------------
Private Sub HSB1 _Change()
If MSHFlexGrid1.Cols then
MSHFlexGrid1.Row = HSB1 .value
MSHFlexGrid1.ColSel = MSHFlexGrid1.Cols - 1
End If
End Sub
'---------------------------------------------------------
Private Sub MSHFlexGrid1_Click()
If MSHFlexGrid1.Cols then
HSB1 .value = MSHFlexGrid1.Row
End If
End Sub
怎么改变MSHFlexGrid某个单元格的颜色
Public Function FlexRedraw(F As MSHFlexGrid) As String
With F
.Redraw = False '禁止重画,防止闪动
.BackColorFixed = RGB(190, 218, 178) '标题行背景色
.Row = 0 '设置标题行文字的对其方式
.Col = 0
.ColSel = .Cols - 1
.CellForeColor = vbBlue '标题行文字颜色
.CellAlignment = 4 '对其方式为中间中间
.ScrollTrack = True '移动滚动条的同时数据也滚动
For I = .FixedRows To .Rows - 1 '单双行表格条纹背景色显示
.Row = I '选择第I行
.Col = .FixedCols
.ColSel = .Cols - 1
If I / 2 = Int(I / 2) Then '判断是单是双
.CellBackColor = RGB(224, 248, 224) '双行的底色
Else
.CellBackColor = RGB(240, 248, 224) '单行的底色
End If
Next I
.Row = 1
.Col = 1
.ColSel = .Cols - 1
.Redraw = True '允许重画,显示表格
End With
End Function
给第0列打钩
MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 0) = "√"
'改变行颜色
For i_Col = 0 To MSFlexGrid1.Cols - 1
MSFlexGrid1.Col = i_Col
MSFlexGrid1.CellBackColor = &H80C0FF
Next i_Col
Private Sub Command1_Click()
MSFlexGrid1.BackColorBkg = vbGreen
End Sub
Private Sub Form_Load()
MSFlexGrid1.Cols = 10
MSFlexGrid1.Rows = 10
MSFlexGrid1.FixedCols = 0
MSFlexGrid1.FixedRows = 0
MSFlexGrid1.SelectionMode = flexSelectionByRow
End Sub
Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
'On Error GoTo Err_Proc
Dim intCurrCol As Long
intCurrCol = MSFlexGrid1.Col
'单击选择或不选择
If MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 0) = "√" Then
MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 0) = ""
'改变行颜色
For i_Col = 0 To MSFlexGrid1.Cols - 1
MSFlexGrid1.Col = i_Col
MSFlexGrid1.CellBackColor = vbWhite
Next i_Col
Else
MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 0) = "√"
'改变行颜色
For i_Col = 0 To MSFlexGrid1.Cols - 1
MSFlexGrid1.Col = i_Col
MSFlexGrid1.CellBackColor = &H80C0FF
Next i_Col
End If
MSFlexGrid1.Col = intCurrCol
Exit Sub
End Sub
Private Sub MSFlexGrid1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Me.Caption = MSFlexGrid1.MouseRow & "," & MSFlexGrid1.MouseCol
End Sub
我想实现的是当我选点击MSHFLEXGRID控件中某行的数据时,其颜色变为与原来的底色不同的颜色,但当我点击鼠标又重新选中其他行时,刚才选中的那一行恢复原来的颜色 ,而刚刚重新选中的新行显示 不同的颜色 。如何实现
1. Private Sub mfg1_Click()
2. Dim row, i, j As Integer
3. row = mfg1.row
4. mfg1.Redraw = False
5. For i = 1 To mfg1.Rows - 1
6. mfg1.row = i
7. For j = 0 To mfg1.Cols - 1
8. mfg1.Col = j
9. mfg1.CellBackColor = &H80000005
10. Next j
11. Next i
12. mfg1.row = row
13. For j = 0 To mfg1.Cols - 1
14. mfg1.Col = j
15. mfg1.CellBackColor = vbGreen
16. Next j
17. mfg1.Redraw = True
18. End Sub
按着ymshjg的方法选中行变色问题解决啦。可我要mshflexgrid的click事件中又添加了下面的代码,为的是实现添加数据行的功能。可添上后text1控件不动了。总在最后 一列,并且mshflexgrid控件 的数据显示总从非第一列显示
(一)、Dim row, i, j As Integer
row = datadzh.row
datadzh.Redraw = False
For i = 1 To datadzh.Rows - 1
datadzh.row = i
For j = 0 To datadzh.Cols - 1
datadzh.Col = j
datadzh.CellBackColor = &HC0FFFF
Next j
Next i
datadzh.row = row
For j = 0 To datadzh.Cols - 1
datadzh.Col = j
datadzh.CellBackColor = vbGreen
Next j
datadzh.Redraw = True
(二)、With datadzh
Text1.Left = .CellLeft + datadzh.Left - 10
Text1.Top = .CellTop + datadzh.Top - 10
Text1.Width = .CellWidth
Text1.Height = .CellHeight
Text1.Text = datadzh.Text
Text1.Enabled = True
Text1.Visible = True
Text1.BackColor = &HC0FFFF
End With
Text1.Visible = True
Text1.SetFocus
end sub
以上为mshflexgrid控件的click事件中全部的代码,要是把(一)、(二)两部分代码单独放置到CLICK事件中就没有问题,一同时放就有问题,不知道哪儿错了。
问题解决了,终于找到原因啦。唉,我在datazw这个控件的mousedown事件下把text定位了。唉。解决了。自己结贴 了嘿嘿。
在VB中,单击MSHFlexGrid中的任何一个单元格即能实现选中该行,这个是怎么实现的?选中的这行变为其它颜色。请各位老师给予帮助。另外单击列标头即能实现排列的互换,这又是怎么实现的呢?
1.Selection Mode =1-By ROW
2. MouseDown事件中如果Y为列头则调用Sort方法
MSHFlexGrid中单击某一行变色
VB codePrivate Sub HFlexgrid_EnterCell()
'单击某一单元时,改变该行颜色
Dim i_Col As Integer
Dim c_col As Integer
c_col = Hflexgrid.Col
If c_col > 0 Then
For i_Col = 0 To Hflexgrid.Cols - 1
Hflexgrid.Col = i_Col
Hflexgrid.CellBackColor = &HFFFFC0
Next i_Col
Hflexgrid.Col = c_col
End If
End Sub
Private Sub HFlexgrid_LeaveCell()
'当某一行失去焦点时,改变该行颜色
Dim i_Col As Integer
Dim c_col As Integer
c_col = Hflexgrid.Col
For i_Col = 0 To Hflexgrid.Cols - 1
Hflexgrid.Col = i_Col
Hflexgrid.CellBackColor = vbWhite
Next i_Col
Hflexgrid.Col = c_col
End Sub
让MSHFlexGrid只能被选中一行
MSHFlexGrid控件点击时可以选中多行,但有时我们需要仅仅选中一行,有一个小技巧:
Option Explicit
Dim CURRENTROW As Integer
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
End With
End Sub
Private Sub MSHFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
With MSHFlexGrid1
.Row = .MouseRow
CURRENTROW = .Row
.Col = 0
.ColSel = .Cols - 1
End With
End Sub
Private Sub MSHFlexGrid1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
With MSHFlexGrid1
.RowSel = CURRENTROW
.ColSel = .Cols - 1
End With
End Sub
如何让MSHFlexGrid只能被选中一行]
Option Explicit
Dim CURRENTROW As Integer
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
End With
End Sub
Private Sub MSHFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
With MSHFlexGrid1
.Row = .MouseRow
CURRENTROW = .Row
.Col = 0
.ColSel = .Cols - 1
End With
End Sub
Private Sub MSHFlexGrid1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
With MSHFlexGrid1
.RowSel = CURRENTROW
.ColSel = .Cols - 1
End With
End Sub
展开阅读全文