以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  LISTVIEW平铺外框怎么做?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=116256)

--  作者:yangsion
--  发布时间:2018/3/21 21:38:00
--  LISTVIEW平铺外框怎么做?
Dim lvw As WinForm.ListView = e.Form.Controls("ListView1")
lvw.StopRedraw() \'暂停绘制
lvw.Rows.Clear() \'清除原来的行
lvw.Images.Clear() \'清除原来的图片
lvw.View = ViewMode.Tile \'显示模式为平铺
lvw.Images.LargeSize = New Size(65,75) \'定义大图标尺寸
lvw.TitleSize = New Size(150,90)  \'设置平铺区域的大小 
Dim cls() As String = {"编号","姓名","部门","职务","性别"} \'定义列名 
For i As Integer = 0 To  cls.Length - 1  \'增加列 
    Dim c As WinForm.ListViewColumn = lvw.Columns.Add() 
    c.Name = cls(i) \'指定列名 
Next
For Each dr As DataRow In DataTables("员工").DataRows \'从数据表中提取数据 
    Dim Key As String = dr("照片") \'获取此员工的照片文件
    lvw.Images.AddLargeImage(Key, Key) \'添加照片,直接用文件名作为图片键值
    Dim vr As  WinForm.ListViewRow =  lvw.Rows.Add() \'增加一行
    vr.ToolTipText = dr("备注")  \'设置此行的动态提示
    vr.ImageKey = Key \'设置图片键值
    For Each cl As String In cls \'逐列取值
        vr(cl) = dr(cl)
    Next
Next
图片点击可在新窗口打开查看此主题相关图片如下:listiew-平铺线条外框.jpg
图片点击可在新窗口打开查看
lvw.ResumeRedraw() \'恢复绘制


--  作者:yangsion
--  发布时间:2018/3/21 21:46:00
--  
请问各位大神这个怎么编写?需要绘制线条,颜色是按某列来指定变化
--  作者:有点甜
--  发布时间:2018/3/21 22:34:00
--  

全局代码

 

Public Sub listView1_DrawItem(ByVal sender As Object, ByVal e As Windows.forms.DrawListViewItemEventArgs)

Dim n As New Pen(Color.Red,2)
Dim rect As new Rectangle(e.Bounds.left-1, e.Bounds.top-1, e.Bounds.width-2, e.Bounds.height-2)
e.Graphics.DrawRectangle(n, e.Bounds)
e.Graphics.DrawImage(sender.LargeImageList(e.Item.ImageIndex), rect)

End Sub

 

生成代码

 

Dim lvw As WinForm.ListView = e.Form.Controls("ListView1")
Dim blvw As windows.Forms.Listview = lvw.basecontrol
blvw.OwnerDraw = True
addhandler blvw.DrawItem, addressof listView1_DrawItem


--  作者:yangsion
--  发布时间:2018/3/21 22:42:00
--  
谢谢大神,但是这个颜色数固定红色的吗?比如我表A有一列为颜色,里面有不同的颜色,RED,YELLOW等等,可以定义进去吗?小白麻烦大神了
--  作者:有点甜
--  发布时间:2018/3/21 23:16:00
--  

参考代码

 

Public Sub listView1_DrawItem(ByVal sender As Object, ByVal e As Windows.forms.DrawListViewItemEventArgs)

If e.item.SubItems("性别").text = "男" Then
    Dim n As New Pen(Color.Red,2)
    e.Graphics.DrawRectangle(n, e.Bounds)
Else
    Dim n As New Pen(Color.yellow,2)
    e.Graphics.DrawRectangle(n, e.Bounds)
End If
Dim rect As new Rectangle(e.Bounds.left-1, e.Bounds.top-1, e.Bounds.width-2, e.Bounds.height-2)
e.Graphics.DrawImage(sender.LargeImageList(e.Item.ImageIndex), rect)

End Sub