1、常见改变MSHFLEXGRID的颜色的方法如何将选中的MSHFlexGrid一行高亮显示高亮显示要设置颜色PrivateSubhflexgrid_EnterCell()单击某一单元时,改变该行颜色Dimi_ColAsIntegerDimc_colAsIntegerc_col=Hflexgrid.colIfc_col0ThenFori_Col=0ToHflexgrid.Cols-1Hflexgrid.col=i_ColHflexgrid.CellBackColor=&HFFFFC0Nexti_ColHflexgrid.col=c_colEndIfEndSubPrivateSubhflexgrid
2、_LeaveCell()当某一行失去焦点时,恢复该行颜色Dimi_ColAsIntegerDimc_colAsIntegerc_col=Hflexgrid.colFori_Col=0ToHflexgrid.Cols-1Hflexgrid.col=i_ColHflexgrid.CellBackColor=vbWhiteNexti_ColHflexgrid.col=c_colEndSubmshflexgrid怎么改变某一行的背景色和字体颜色?Private Sub setColor(msfg As MSFlexGrid, row As Long, color As Long, bkcolor As
3、 Long)For i = 1 To msfg.Cols - 1msfg.row = rowmsfg.Col = imsfg.CellForeColor = color 前景色msfg.CellBackColor = bkcolor 背景色NextEnd SubPrivate Sub Command1_Click() setColor MSFlexGrid1, 3, &HFFFF&, &H8000000DEnd SubPrivate Sub Form_Load() MSFlexGrid1.Rows = 5 MSFlexGrid1.Cols = 5 For i = 1 To 4 For j =
4、1 To 4 MSFlexGrid1.TextMatrix(i, j) = j Next NextEnd Sub让MSHFlexGrid只能被选中一行的另一方法1、放置一个HSB1(HScrollBar),MSHFlexGrid1(MSHFlexGrid)2、如下代码:-PrivateSubForm_Load()IfMSHFlexGrid1.ColsthenHSB1.Min=1HSB1.Max=MSHFlexGrid1.ColsEndIfEndSub-PrivateSubHSB1_Change()IfMSHFlexGrid1.ColsthenMSHFlexGrid1.Row=HSB1.valu
5、eMSHFlexGrid1.ColSel=MSHFlexGrid1.Cols-1EndIfEndSub-PrivateSubMSHFlexGrid1_Click()IfMSHFlexGrid1.ColsthenHSB1.value=MSHFlexGrid1.RowEndIfEndSub怎么改变MSHFlexGrid某个单元格的颜色Public Function FlexRedraw(F As MSHFlexGrid) As String With F .Redraw = False 禁止重画,防止闪动 .BackColorFixed = RGB(190, 218, 178) 标题行背景色 .R
6、ow = 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
7、, 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.CellBa
8、ckColor = &H80C0FF Next i_ColPrivate Sub Command1_Click()MSFlexGrid1.BackColorBkg = vbGreenEnd SubPrivate Sub Form_Load()MSFlexGrid1.Cols = 10MSFlexGrid1.Rows = 10MSFlexGrid1.FixedCols = 0MSFlexGrid1.FixedRows = 0MSFlexGrid1.SelectionMode = flexSelectionByRowEnd SubPrivate Sub MSFlexGrid1_MouseDown(
9、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.
10、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 SubEnd SubPrivate Sub MSFlexGrid1_
11、MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single) Me.Caption = MSFlexGrid1.MouseRow & , & MSFlexGrid1.MouseColEnd Sub我想实现的是当我选点击MSHFLEXGRID控件中某行的数据时,其颜色变为与原来的底色不同的颜色,但当我点击鼠标又重新选中其他行时,刚才选中的那一行恢复原来的颜色 ,而刚刚重新选中的新行显示 不同的颜色 。如何实现1. Private Sub mfg1_Click()2. Dim row, i, j As Intege
12、r3. row = mfg1.row4. mfg1.Redraw = False5. For i = 1 To mfg1.Rows - 16. mfg1.row = i7. For j = 0 To mfg1.Cols - 18. mfg1.Col = j9. mfg1.CellBackColor = &H8000000510. Next j11. Next i12. mfg1.row = row13. For j = 0 To mfg1.Cols - 114. mfg1.Col = j15. mfg1.CellBackColor = vbGreen16. Next j17. mfg1.Red
13、raw = True18. End Sub按着ymshjg的方法选中行变色问题解决啦。可我要mshflexgrid的click事件中又添加了下面的代码,为的是实现添加数据行的功能。可添上后text1控件不动了。总在最后 一列,并且mshflexgrid控件 的数据显示总从非第一列显示(一)、Dim row, i, j As Integerrow = datadzh.rowdatadzh.Redraw = FalseFor i = 1 To datadzh.Rows - 1 datadzh.row = i For j = 0 To datadzh.Cols - 1 datadzh.Col = j
14、 datadzh.CellBackColor = &HC0FFFF Next jNext idatadzh.row = rowFor j = 0 To datadzh.Cols - 1 datadzh.Col = j datadzh.CellBackColor = vbGreenNext jdatadzh.Redraw = True(二)、With datadzh Text1.Left = .CellLeft + datadzh.Left - 10 Text1.Top = .CellTop + datadzh.Top - 10 Text1.Width = .CellWidth Text1.He
15、ight = .CellHeight Text1.Text = datadzh.Text Text1.Enabled = True Text1.Visible = True Text1.BackColor = &HC0FFFF End With Text1.Visible = True Text1.SetFocusend sub以上为mshflexgrid控件的click事件中全部的代码,要是把(一)、(二)两部分代码单独放置到CLICK事件中就没有问题,一同时放就有问题,不知道哪儿错了。问题解决了,终于找到原因啦。唉,我在datazw这个控件的mousedown事件下把text定位了。唉。解
16、决了。自己结贴 了嘿嘿。在VB中,单击MSHFlexGrid中的任何一个单元格即能实现选中该行,这个是怎么实现的?选中的这行变为其它颜色。请各位老师给予帮助。另外单击列标头即能实现排列的互换,这又是怎么实现的呢?1.Selection Mode =1-By ROW 2. MouseDown事件中如果Y为列头则调用Sort方法MSHFlexGrid中单击某一行变色VBcodePrivateSubHFlexgrid_EnterCell()单击某一单元时,改变该行颜色Dimi_ColAsIntegerDimc_colAsIntegerc_col=Hflexgrid.ColIfc_col0ThenFo
17、ri_Col=0ToHflexgrid.Cols-1Hflexgrid.Col=i_ColHflexgrid.CellBackColor=&HFFFFC0Nexti_ColHflexgrid.Col=c_colEndIfEndSubPrivateSubHFlexgrid_LeaveCell()当某一行失去焦点时,改变该行颜色Dimi_ColAsIntegerDimc_colAsIntegerc_col=Hflexgrid.ColFori_Col=0ToHflexgrid.Cols-1Hflexgrid.Col=i_ColHflexgrid.CellBackColor=vbWhiteNexti_
18、ColHflexgrid.Col=c_colEndSub让MSHFlexGrid只能被选中一行MSHFlexGrid控件点击时可以选中多行,但有时我们需要仅仅选中一行,有一个小技巧:Option ExplicitDim CURRENTROW As IntegerPrivate Sub Form_Load()Dim i As Integer, j As IntegerWith MSHFlexGrid1.Rows = 10.Cols = 4For i = 1 To 9.TextMatrix(i, 0) = 第 & i & 行For j = 1 To 3.TextMatrix(0, j) = 第 &
19、 j & 列.TextMatrix(i, j) = i & , & jNextNextEnd WithEnd SubPrivate 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 WithEnd SubPrivate Sub MSHFlexGrid1_MouseUp(Button As Inte
20、ger, Shift As Integer, x As Single, y As Single)With MSHFlexGrid1.RowSel = CURRENTROW.ColSel = .Cols - 1End WithEnd Sub如何让MSHFlexGrid只能被选中一行Option ExplicitDim CURRENTROW As IntegerPrivate Sub Form_Load()Dim i As Integer, j As IntegerWith MSHFlexGrid1.Rows = 10.Cols = 4For i = 1 To 9.TextMatrix(i, 0)
21、 = 第 & i & 行For j = 1 To 3.TextMatrix(0, j) = 第 & j & 列.TextMatrix(i, j) = i & , & jNextNextEnd WithEnd SubPrivate Sub MSHFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)With MSHFlexGrid1.Row = .MouseRowCURRENTROW = .Row.Col = 0.ColSel = .Cols - 1End WithEnd SubPrivate Sub MSHFlexGrid1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)With MSHFlexGrid1.RowSel = CURRENTROW.ColSel = .Cols - 1End WithEnd Sub
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1