再问!关于listview图标排列问题!

jshyjyw 2003-09-15 04:05:18
上一个问题 “ 怎样用listview实现图标位置的保存和载入? ”问题已经解决并结帖。
完成后的程序如下:
-----------------------------------
Private Sub Command1_Click() '按学号顺序排列
Dim num As Long
Dim i As Long
Dim str
Dim itmx

Adodc1.RecordSource = "select * from 学生 order by 学号"
Adodc1.Refresh
num = Adodc1.Recordset.RecordCount
ListView1.ListItems.Clear
ListView1.ColumnHeaders.Clear

str = ListView1.ColumnHeaders.Add(1, , "姓名", 2000)
str = ListView1.ColumnHeaders.Add(2, , "学号", 2000)
str = ListView1.ColumnHeaders.Add(3, , "Sex", 500)
str = ListView1.ColumnHeaders.Add(4, , "Phone", 1400)
For i = 1 To num
Set itmx = ListView1.ListItems.Add
itmx.Text = Adodc1.Recordset.Fields(2)
itmx.SubItems(1) = Adodc1.Recordset.Fields(1)
itmx.SubItems(2) = Adodc1.Recordset.Fields(3)
itmx.SubItems(3) = Adodc1.Recordset.Fields(8)

itmx.Icon = 1

Adodc1.Recordset.MoveNext
Next i
End Sub

Private Sub Command2_Click() '从数据库中加载
Dim num As Long
Dim i As Long
Dim str
Dim itmx

Adodc1.RecordSource = "select * from 学生 order by 学号"
Adodc1.Refresh
num = Adodc1.Recordset.RecordCount
ListView1.ListItems.Clear
ListView1.ColumnHeaders.Clear

str = ListView1.ColumnHeaders.Add(1, , "姓名", 2000)
str = ListView1.ColumnHeaders.Add(2, , "学号", 2000)
str = ListView1.ColumnHeaders.Add(3, , "Sex", 500)
str = ListView1.ColumnHeaders.Add(4, , "Phone", 1400)
For i = 1 To num
Set itmx = ListView1.ListItems.Add
itmx.Text = Adodc1.Recordset.Fields(2)
itmx.SubItems(1) = Adodc1.Recordset.Fields(1)
itmx.SubItems(2) = Adodc1.Recordset.Fields(3)
itmx.SubItems(3) = Adodc1.Recordset.Fields(8)
itmx.Icon = 1
itmx.Left = Adodc1.Recordset.Fields(15)
itmx.Top = Adodc1.Recordset.Fields(16)
Adodc1.Recordset.MoveNext
Next i
End Sub

Private Sub Command3_Click() '保存到数据库
Dim i As Long
Dim lc As Long
Dim cnn1 As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strSQL As String

cnn1.Open SN
lc = ListView1.ListItems.Count

For i = 1 To lc
strSQL = "update 学生 set 座位X='" & ListView1.ListItems(i).Left & "'," _
& "座位Y='" & ListView1.ListItems(i).Top & "'" _
& "where 学号='" & ListView1.ListItems(i).SubItems(1) & "'"
cnn1.Execute (strSQL)
Next i

cnn1.Close
Set cnn1 = Nothing
Set rs = Nothing
MsgBox "ok!"
End Sub

Private Sub Form_Load()
Adodc1.ConnectionString = SN

Me.WindowState = vbMaximized

End Sub

Private Sub Form_Resize()
If Me.Height - 1500 > 0 Then
ListView1.Height = Me.Height - 1000
End If


End Sub
---------------------------------------------------

现在又有新问题了:
1、象桌面图标那样“对齐图标”的功能如何实现?
2、象桌面图标那样按类型、按名称、等不同的条件排列图标如何实现?
(反映在我的程序中就是按高矮、按学生成绩排座位)
3、每行显示图标个数可按参数设置?如果显示不下出现横向滚动条?

有代码更好,没有代码有思路也行。集思广益,谢谢。
...全文
144 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigspook 2003-10-06
  • 打赏
  • 举报
回复
up
jshyjyw 2003-10-02
  • 打赏
  • 举报
回复
你提前的太频繁了!!!
jshyjyw 2003-09-30
  • 打赏
  • 举报
回复
to rainstormmaster(rainstormmaster) :
你的方法也不行。

我已经把这个程序打包了,请大家下载了帮帮忙看看。谢谢。

http://www.jshywx.com/download/soft/pzw.rar
hxy1982 2003-09-28
  • 打赏
  • 举报
回复
up
rainstormmaster 2003-09-26
  • 打赏
  • 举报
回复
试试这个

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long

Private Const LVM_ARRANGE = &H1016

Private Sub Command1_Click()
Dim hWnd1 As Long
Dim Ret As Long
hWnd1 = me.listview1.hWnd
Ret = SendMessage(hWnd1, LVM_ARRANGE, 0, 0)
End Sub
wingchi 2003-09-25
  • 打赏
  • 举报
回复
u~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~p
jshyjyw 2003-09-25
  • 打赏
  • 举报
回复
to lxcc(虫莲) :找个苏亚星网络教室软件看看。它有每行图标个数设置的功能。

to all:经过测试,以上方法都不能解决我的问题。
原来的ListView1.Arrange=lvwAnone如果设为lvwAutoLeft,那么图标的位置就乱套了!而我只要它行列对齐而已,相对位置不能变的。
不要告诉我什么单击标题栏实现排序的,仔细看清问题!我的问题是排列图标使之成行成列,而非按某列排序!以大图标方式显示,哪来的标题栏??

苦思不得其解。几天了????唉!
lxcc 2003-09-18
  • 打赏
  • 举报
回复
1、象桌面图标那样“对齐图标”的功能如何实现?
ListView1.Arrange=lvwAutoLeft
2、象桌面图标那样按类型、按名称、等不同的条件排列图标如何实现?
ListView1.SortKey = 2 '2是列序号,按照第二列排序,根据不同条件设置不同的列序号
ListView1.SortOrder = lvwAscending
ListView1.Sorted = True
(反映在我的程序中就是按高矮、按学生成绩排座位)
3、每行显示图标个数可按参数设置?如果显示不下出现横向滚动条?
每行图标个数设置,没见过,帮你up

不过你的提问方式有点怪!不是骂街才出来,只是刚刚才看到!


liul17 2003-09-18
  • 打赏
  • 举报
回复
上一个问题 “ 怎样用listview实现图标位置的保存和载入? ”问题已经解决并结帖。
完成后的程序如下:
-----------------------------------
Private Sub Command1_Click() '按学号顺序排列
Dim num As Long
Dim i As Long
Dim str
Dim itmx

Adodc1.RecordSource = "select * from 学生 order by 学号"
Adodc1.Refresh
num = Adodc1.Recordset.RecordCount
ListView1.ListItems.Clear
ListView1.ColumnHeaders.Clear

str = ListView1.ColumnHeaders.Add(1, , "姓名", 2000)
str = ListView1.ColumnHeaders.Add(2, , "学号", 2000)
str = ListView1.ColumnHeaders.Add(3, , "Sex", 500)
str = ListView1.ColumnHeaders.Add(4, , "Phone", 1400)
For i = 1 To num
Set itmx = ListView1.ListItems.Add
itmx.Text = Adodc1.Recordset.Fields(2)
itmx.SubItems(1) = Adodc1.Recordset.Fields(1)
itmx.SubItems(2) = Adodc1.Recordset.Fields(3)
itmx.SubItems(3) = Adodc1.Recordset.Fields(8)

itmx.Icon = 1

Adodc1.Recordset.MoveNext
Next i
End Sub

Private Sub Command2_Click() '从数据库中加载
Dim num As Long
Dim i As Long
Dim str
Dim itmx

Adodc1.RecordSource = "select * from 学生 order by 学号"
Adodc1.Refresh
num = Adodc1.Recordset.RecordCount
ListView1.ListItems.Clear
ListView1.ColumnHeaders.Clear

str = ListView1.ColumnHeaders.Add(1, , "姓名", 2000)
str = ListView1.ColumnHeaders.Add(2, , "学号", 2000)
str = ListView1.ColumnHeaders.Add(3, , "Sex", 500)
str = ListView1.ColumnHeaders.Add(4, , "Phone", 1400)
For i = 1 To num
Set itmx = ListView1.ListItems.Add
itmx.Text = Adodc1.Recordset.Fields(2)
itmx.SubItems(1) = Adodc1.Recordset.Fields(1)
itmx.SubItems(2) = Adodc1.Recordset.Fields(3)
itmx.SubItems(3) = Adodc1.Recordset.Fields(8)
itmx.Icon = 1
itmx.Left = Adodc1.Recordset.Fields(15)
itmx.Top = Adodc1.Recordset.Fields(16)
Adodc1.Recordset.MoveNext
Next i
End Sub

Private Sub Command3_Click() '保存到数据库
Dim i As Long
Dim lc As Long
Dim cnn1 As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strSQL As String

cnn1.Open SN
lc = ListView1.ListItems.Count

For i = 1 To lc
strSQL = "update 学生 set 座位X='" & ListView1.ListItems(i).Left & "'," _
& "座位Y='" & ListView1.ListItems(i).Top & "'" _
& "where 学号='" & ListView1.ListItems(i).SubItems(1) & "'"
cnn1.Execute (strSQL)
Next i

cnn1.Close
Set cnn1 = Nothing
Set rs = Nothing
MsgBox "ok!"
End Sub

Private Sub Form_Load()
Adodc1.ConnectionString = SN

Me.WindowState = vbMaximized

End Sub

Private Sub Form_Resize()
If Me.Height - 1500 > 0 Then
ListView1.Height = Me.Height - 1000
End If


End Sub
---------------------------------------------------
射天狼 2003-09-18
  • 打赏
  • 举报
回复
ListView1.SortOrder = lvwAscending
ListView1.Sorted = True
jshyjyw 2003-09-18
  • 打赏
  • 举报
回复
日!不骂街所谓的高手就不回了!
3天了!还没有有效的解答!
这个问题真的那么难吗?!
rainstormmaster 2003-09-16
  • 打赏
  • 举报
回复
up
northwolves 2003-09-15
  • 打赏
  • 举报
回复
单击标题栏实现排序:
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As ComctlLib.ColumnHeader)
Dim n As Long
On Error GoTo ClickErr
ListView1.SortKey = ColumnHeader.Index - 1
n = ColumnHeader.Index - 1
If ListView1.SortOrder = lvwDescending Then
ListView1.SortOrder = lvwAscending
Else
ListView1.SortOrder = lvwDescending
End If
ListView1.Sorted = True
Exit_Proc:
Exit Sub
ClickErr:
Resume Exit_Proc
End Sub

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧