常见改变MSHFLEXGRID的颜色的方法.docx
《常见改变MSHFLEXGRID的颜色的方法.docx》由会员分享,可在线阅读,更多相关《常见改变MSHFLEXGRID的颜色的方法.docx(10页珍藏版)》请在冰豆网上搜索。
![常见改变MSHFLEXGRID的颜色的方法.docx](https://file1.bdocx.com/fileroot1/2023-4/24/a393bc30-ee3c-45ec-a401-a8abaaf93aa4/a393bc30-ee3c-45ec-a401-a8abaaf93aa41.gif)
常见改变MSHFLEXGRID的颜色的方法
如何将选中的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怎么改变某一行的背景色和字体颜色?
PrivateSubsetColor(msfgAsMSFlexGrid,rowAsLong,colorAsLong,bkcolorAsLong)
Fori=1Tomsfg.Cols-1
msfg.row=row
msfg.Col=i
msfg.CellForeColor=color'前景色
msfg.CellBackColor=bkcolor'背景色
Next
EndSub
PrivateSubCommand1_Click()
setColorMSFlexGrid1,3,&HFFFF&,&H8000000D
EndSub
PrivateSubForm_Load()
MSFlexGrid1.Rows=5
MSFlexGrid1.Cols=5
Fori=1To4
Forj=1To4
MSFlexGrid1.TextMatrix(i,j)=j
Next
Next
EndSub
让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)="√"
'改变行颜色
Fori_Col=0ToMSFlexGrid1.Cols-1
MSFlexGrid1.Col=i_Col
MSFlexGrid1.CellBackColor=&H80C0FF
Nexti_Col
PrivateSubCommand1_Click()
MSFlexGrid1.BackColorBkg=vbGreen
EndSub
PrivateSubForm_Load()
MSFlexGrid1.Cols=10
MSFlexGrid1.Rows=10
MSFlexGrid1.FixedCols=0
MSFlexGrid1.FixedRows=0
MSFlexGrid1.SelectionMode=flexSelectionByRow
EndSub
PrivateSubMSFlexGrid1_MouseDown(ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)
'OnErrorGoToErr_Proc
DimintCurrCol AsLong
intCurrCol=MSFlexGrid1.Col
'单击选择或不选择
IfMSFlexGrid1.TextMatrix(MSFlexGrid1.Row,0)="√"Then
MSFlexGrid1.TextMatrix(MSFlexGrid1.Row,0)=""
'改变行颜色
Fori_Col=0ToMSFlexGrid1.Cols-1
MSFlexGrid1.Col=i_Col
MSFlexGrid1.CellBackColor=vbWhite
Nexti_Col
Else
MSFlexGrid1.TextMatrix(MSFlexGrid1.Row,0)="√"
'改变行颜色
Fori_Col=0ToMSFlexGrid1.Cols-1
MSFlexGrid1.Col=i_Col
MSFlexGrid1.CellBackColor=&H80C0FF
Nexti_Col
EndIf
MSFlexGrid1.Col=intCurrCol
ExitSub
EndSub
PrivateSubMSFlexGrid1_MouseMove(ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)
Me.Caption=MSFlexGrid1.MouseRow&","&MSFlexGrid1.MouseCol
EndSub
我想实现的是当我选点击MSHFLEXGRID控件中某行的数据时,其颜色变为与原来的底色不同的颜色,但当我点击鼠标又重新选中其他行时,刚才选中的那一行恢复原来的颜色,而刚刚重新选中的新行显示不同的颜色。
如何实现
1.PrivateSubmfg1_Click()
2.Dimrow,i,jAsInteger
3.row=mfg1.row
4.mfg1.Redraw=False
5.Fori=1Tomfg1.Rows-1
6. mfg1.row=i
7. Forj=0Tomfg1.Cols-1
8. mfg1.Col=j
9. mfg1.CellBackColor=&H80000005
10. Nextj
11.Nexti
12.mfg1.row=row
13.Forj=0Tomfg1.Cols-1
14. mfg1.Col=j
15. mfg1.CellBackColor=vbGreen
16.Nextj
17.mfg1.Redraw=True
18.EndSub
按着ymshjg的方法选中行变色问题解决啦。
可我要mshflexgrid的click事件中又添加了下面的代码,为的是实现添加数据行的功能。
可添上后text1控件不动了。
总在最后一列,并且mshflexgrid控件的数据显示总从非第一列显示
(一)、Dimrow,i,jAsInteger
row=datadzh.row
datadzh.Redraw=False
Fori=1Todatadzh.Rows-1
datadzh.row=i
Forj=0Todatadzh.Cols-1
datadzh.Col=j
datadzh.CellBackColor=&HC0FFFF
Nextj
Nexti
datadzh.row=row
Forj=0Todatadzh.Cols-1
datadzh.Col=j
datadzh.CellBackColor=vbGreen
Nextj
datadzh.Redraw=True
(二)、Withdatadzh
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
EndWith
Text1.Visible=True
Text1.SetFocus
endsub
以上为mshflexgrid控件的click事件中全部的代码,要是把
(一)、
(二)两部分代码单独放置到CLICK事件中就没有问题,一同时放就有问题,不知道哪儿错了。
问题解决了,终于找到原因啦。
唉,我在datazw这个控件的mousedown事件下把text定位了。
唉。
解决了。
自己结贴了嘿嘿。
在VB中,单击MSHFlexGrid中的任何一个单元格即能实现选中该行,这个是怎么实现的?
选中的这行变为其它颜色。
请各位老师给予帮助。
另外单击列标头即能实现排列的互换,这又是怎么实现的呢?
1.SelectionMode=1-ByROW
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控件点击时可以选中多行,但有时我们需要仅仅选中一行,有一个小技巧:
OptionExplicit
DimCURRENTROWAsInteger
PrivateSubForm_Load()
DimiAsInteger,jAsInteger
WithMSHFlexGrid1
.Rows=10
.Cols=4
Fori=1To9
.TextMatrix(i,0)="第"&i&"行"
Forj=1To3
.TextMatrix(0,j)="第"&j&"列"
.TextMatrix(i,j)=i&","&j
Next
Next
EndWith
EndSub
PrivateSubMSHFlexGrid1_MouseDown(ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)
WithMSHFlexGrid1
.Row=.MouseRow
CURRENTROW=.Row
.Col=0
.ColSel=.Cols-1
EndWith
EndSub
PrivateSubMSHFlexGrid1_MouseUp(ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)
WithMSHFlexGrid1
.RowSel=CURRENTROW
.ColSel=.Cols-1
EndWith
EndSub
如何让MSHFlexGrid只能被选中一行]
OptionExplicit
DimCURRENTROWAsInteger
PrivateSubForm_Load()
DimiAsInteger,jAsInteger
WithMSHFlexGrid1
.Rows=10
.Cols=4
Fori=1To9
.TextMatrix(i,0)="第"&i&"行"
Forj=1To3
.TextMatrix(0,j)="第"&j&"列"
.TextMatrix(i,j)=i&","&j
Next
Next
EndWith
EndSub
PrivateSubMSHFlexGrid1_MouseDown(ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)
WithMSHFlexGrid1
.Row=.MouseRow
CURRENTROW=.Row
.Col=0
.ColSel=.Cols-1
EndWith
EndSub
PrivateSubMSHFlexGrid1_MouseUp(ButtonAsInteger,ShiftAsInteger,xAsSingle,yAsSingle)
WithMSHFlexGrid1
.RowSel=CURRENTROW
.ColSel=.Cols-1
EndWith
EndSub