标题:关于背景色问题?
只看楼主
dasdaa
Rank: 1
等 级:新手上路
威 望:2
帖 子:40
专家分:0
注 册:2019-12-24
结帖率:50%
 问题点数:0 回复次数:3 
关于背景色问题?
使用控件,想达到这个效果,第一行背景色是红色,第二行到最后一行背景色是白色。如果选中任意一行,该行选中的背景色是黄色,第一行背景色变成白色

[此贴子已经被作者于2021-12-7 18:11编辑过]

搜索更多相关主题的帖子: 任意 选中 一行 效果 背景色 
2021-12-05 21:21
kings12333
Rank: 2
等 级:论坛游民
帖 子:112
专家分:59
注 册:2012-11-29
得分:0 
回复 楼主 dasdaa
帮兄弟顶一下……我也在找类似的表格控件,因Listview不支持单行着底色也是非常的头大啊,看了网上大部分隔行着色使用的API image控件来填充的,这样大大影响了listview控件的速度..
2021-12-08 16:26
hmj0745
Rank: 2
等 级:论坛游民
帖 子:52
专家分:83
注 册:2021-11-6
得分:0 
回复 楼主 dasdaa
我也是刚学一个月, 我前段时间也在找表格控件,找不到合适的,就先用MSHFlexGrid1 凑合着用。隔行变色,自调整列宽也做了。
你要的功能代码是可以实现的,我把我现在做的发你参考一下做思路,要达到自己的功能要自己多试。

***********************************************************************************


**tfrm中代码***********************************************************************************
程序代码:
Private Sub 查询_Click()
On Error GoTo errmsg
'Dim t
't = Timer   '//开始时间
Call LockWindowUpdate(Me.hwnd) '//禁止更新防止闪烁
Me.MSHFlexGrid1.Clear
StrDB = "\data\2商务项目.accdb"
myTable = "B1客户列表"

If Me.查询大类 = "" Or Me.关键字 = "" Then
SQL = "select * from " & myTable & " ORDER BY 客户编号 DESC" '//   DESC反序"
Else
Dim NB As String: NB = Me.查询大类
Dim Cx As String: Cx = Me.关键字
SQL = "SELECT * FROM " & myTable & " where " & NB & " like '%" & Cx & "%'"
End If

Opendb (StrDB)
Set RS = CreateObject("adodb.recordset") '//创建一个数据集保存数据
RS.Open SQL, cnn, 1, 3 '//数据集保存数据
Set Me.MSHFlexGrid1.DataSource = RS
Me.Frame2.Caption = "***列表" & RS.RecordCount & "项***"

Call setCol(Me, MSHFlexGrid1, 500, 400) '//自适应列宽,根据是否超首行宽度进行不同的系数补偿
Call SetRowFont(MSHFlexGrid1, 350, 350, 11, 9) '//分别设定首行高度和下面的行高
Call setColAlig(Me, MSHFlexGrid1, 1) '//设置数据对齐方式
Call setBackcol(MSHFlexGrid1) '//设置隔行背景色
Call LockWindowUpdate(0) '//开启更新
GoTo 111
errmsg: MsgBox Err.Description, , "错误报告"
111
'MsgBox "查询完毕!一共用时:" & Format(Timer - t, "#0.0000") & " 秒", , "系统提示!!"   '//提示所用时间
Disconnect
End Sub

****模块中代码***********************************************************
程序代码:
'01函数名: SetrowFont
'函数功能: MSHFlexGrid设定单元格隔行背景色
'参数说明: 表格控件名,首行高,其它行高,首行字号,其它行字号
'*****************************************************************************************
'*****************************************************************************************
Public Sub SetRowFont(MSHF As Object, RowH1 As Long, RowH As Long, TextSize1 As Single, TextSize As Single)
Dim i As Integer, j As Integer
    With MSHF
               .TextMatrix(0, 0) = "序号"
               .RowHeight(0) = RowH1  '//第一行行高
        For i = 1 To .Rows - 1
               .TextMatrix(i, 0) = i '//在第一列写入行号
               .RowHeight(i) = RowH '//其它行行高
        Next
        
        .CellFontName = "宋体"
        .CellFontSize = TextSize
       ' .ForeColorFixed = RGB(0, 0, 0) '//标头字体色
       ' .ForeColor = RGB(0, 0, 0) '//普通单元格字体颜色
        
        For j = 0 To .Cols - 1
               .Row = 0
               .Col = j
               .CellFontSize = TextSize1
        Next
    End With
End Sub

'02函数名: setCol
'函数功能: MSHFlexGrid设定行自适用列宽+补偿
'*****************************************************************************************
'*****************************************************************************************
Public Sub setCol(Myform As Form, MSHF As Object, B1 As Long, b2 As Long)
Dim x, y As Integer
Dim Width0, maxwidth, minwidth As Double
With MSHF
For y = 1 To .Cols - 1
Width0 = 0
   For x = 0 To .Rows - 1
      If x = 0 Then
        Width0 = Myform.TextWidth(.TextMatrix(x, y)) '// 把第一行的字段宽度做为初始列宽
          GoTo 222 ' 第一行取得列宽初始值后直接跳转到此
             End If
      If Myform.TextWidth(.TextMatrix(x, y)) > Width0 Then
        Width0 = Myform.TextWidth(.TextMatrix(x, y)) '// 遍历此列找到最宽的一个一行数据,赋给Width0
           End If
222
       Next
                
If Width0 = Myform.TextWidth(.TextMatrix(0, y)) Then '//对字段做出判断
.ColWidth(y) = Width0 + b2 ' //如果列内字符长度不超过首行则补偿系数为b2
Else
.ColWidth(y) = Width0 + B1 ' //如果列内字符串长度超过首行则补偿系数为B1
End If
Next
End With
MSHF.ColWidth(0) = 600 '// 在此直接对第一列做出固定定义
End Sub

'02函数名: setColAlig
'函数功能: MSHFlexGrid设定单元格对齐方式
'*****************************************************************************************
'*****************************************************************************************
Public Sub setColAlig(Myform As Form, MSHF As Object, x As Integer)
Dim y As Integer
For y = 0 To MSHF.Cols - 1

 MSHF.ColAlignment(y) = x

 MSHF.FixedAlignment(y) = 4 '设置首行的对齐方式
Next
End Sub
        
'02函数名: setbackcol
'函数功能: MSHFlexGrid设定单元格隔行背景色
'*****************************************************************************************
'*****************************************************************************************
Public Sub setBackcol(MSHF As Object)
Dim x As Integer
With MSHF
         .AllowBigSelection = True '设置网格样式
         .FillStyle = flexFillRepeat
    For x = 1 To .Rows - 1
         .Row = x: .Col = .FixedCols
         .ColSel = .Cols() - .FixedCols ' - 1
         If x Mod 2 = 0 Then
         .CellBackColor = vbWhite '
         Else
         .CellBackColor = RGB(213, 216, 217) '
         End If
    Next
   '.FocusRect = flexFocusNone
    End With
End Sub
    


[此贴子已经被作者于2021-12-10 18:39编辑过]


不去做永远没有结果!
2021-12-10 18:38
kings12333
Rank: 2
等 级:论坛游民
帖 子:112
专家分:59
注 册:2012-11-29
得分:0 
回复 3楼 hmj0745
兄弟,发个事例出来参考一下。。可以把重要数据替换掉,一直在找一个这样的表格控件的操作案例
2021-12-10 22:28



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-507767-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.093403 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved