410521a 发表于 2010-6-29 21:35:09

谁能给个listview的分页显示的例子 ||||基本好了`非常感谢afan [已解决]

本帖最后由 410521a 于 2010-7-1 20:42 编辑

谁能给个listview的分页显示的例子``最好有注释~谢谢

比如果读取INI文件后显示50条数据`` 点下一页后再显示后50条`` 以此类推

如果有方法一下把INI里边的数据读出来也行`` 这样一条一条的太慢了``

xunzhang22 发表于 2010-6-30 00:10:38

好像还没有人做出来?????

水木子 发表于 2010-6-30 11:00:06

哎!生病在家休息,趴在床上简单写了个例子,写得有点乱,将就看吧!
脚本和下面的INI文件,放在同目录下运行即可!#include <GuiListView.au3>
#include <WindowsConstants.au3>

Local $iChange = 20, $iNumber1 = 1, $iNumber2 = $iChange ;变量 $iChange 是每页显示多少个项目
Local $bTf = True

$var = IniReadSection(@ScriptDir & '\Config.ini', 'Config')
If @error Then
        MsgBox(48, "出错!", "发生错误,INI文件读取失败!") ;INI文件读取错误将退出
        Exit
EndIf

GUICreate("Form1", 400, 450)
$ListView1 = GUICtrlCreateListView("编号|内容", 5, 5, 390, 380, -1, BitOR($WS_EX_CLIENTEDGE, $LVS_EX_FULLROWSELECT, $LVS_REPORT))
_GUICtrlListView_SetColumnWidth($ListView1, 0, 100)
_GUICtrlListView_SetColumnWidth($ListView1, 1, 280)
$Button1 = GUICtrlCreateButton("上一页", 80, 400, 80, 30, $WS_GROUP)
$Button2 = GUICtrlCreateButton("下一页", 250, 400, 80, 30, $WS_GROUP)
Read($iNumber1, $iNumber2) ;首次读取
GUISetState()

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case - 3
                        Exit
                Case $Button1 ;上一页
                        $bTf = True
                        If $iNumber2 - $iChange < 1 Then ;这里判断是否到了第一页
                                $iNumber1 = 1
                                $iNumber2 = $iChange
                                MsgBox(0, '提示!', '这里是第一页')
                        Else
                                $iNumber1 -= $iChange
                                $iNumber2 -= $iChange
                                Read($iNumber1, $iNumber2)
                        EndIf
                Case $Button2 ;下一页
                        If $iNumber2 + $iChange > UBound($var) - 1 Then ;这里判读是否到了最后一页
                                If $bTf = True Then
                                        Read($iNumber1 + $iChange, UBound($var) - 1)
                                        $iNumber1 += $iChange
                                        $iNumber2 += $iChange
                                        $bTf = False
                                Else
                                        MsgBox(0, '提示!', '这里是最后一页')
                                EndIf
                        Else
                                $iNumber1 += $iChange
                                $iNumber2 += $iChange
                                Read($iNumber1, $iNumber2)
                        EndIf
        EndSwitch
WEnd

Func Read($iNo1, $iNo2)
        _GUICtrlListView_DeleteAllItems($ListView1)
        For $i = $iNo1 To $iNo2
                GUICtrlCreateListViewItem($var[$i] & '|' & $var[$i], $ListView1)
        Next
EndFunc   ;==>Read

hzxymkb 发表于 2010-6-30 11:18:21

水木子真是强人!小弟实在是太佩服了!

zcx880517 发表于 2010-6-30 11:43:30

向高手学习。。好例子,,拿下。。3Q

410521a 发表于 2010-6-30 13:19:21

多谢水木子`` 愿早日康复`` 我也有点小感冒哎` `吹空调吹的了`` `这天真不想让人活了

afan 发表于 2010-6-30 13:26:53

看来感冒的还真不少,我也吃了几天的药了,还在咳嗽~ 大家要注意身体呀~

410521a 发表于 2010-6-30 13:30:48

首页尾页呢?

水木子 发表于 2010-6-30 13:55:26

回复 8# 410521a

你的意思是直接一键到首页或尾页吗?

仔细看其实很容易理解的, Read($iNumber1, $iNumber2) 这个就是首页

尾页只需稍作修改既可以。

afan 发表于 2010-6-30 15:07:32

本帖最后由 afan 于 2010-6-30 15:33 编辑

拿木子童鞋的改一下不就行了,自己动动手嘛

410521a 发表于 2010-6-30 16:37:16

哎水平有限`` 没弄成功`` 添加到我的代码里边总是提示Func Read($iNo1, $iNo2)

afan能否共享下你修改的代码`` 谢谢

410521a 发表于 2010-6-30 16:38:26

高手如云呀` `就我菜``

afan 发表于 2010-6-30 16:50:19

哎水平有限`` 没弄成功`` 添加到我的代码里边总是提示Func Read($iNo1, $iNo2)

afan能否共享下你修改 ...
410521a 发表于 2010-6-30 16:37 http://www.autoitx.com/images/common/back.gif

自己动过手再看答案会有不一样的感觉~#include <GuiListView.au3>
#include <WindowsConstants.au3>

$var = IniReadSection(@ScriptDir & '\Config.ini', 'Config')
If @error Then Exit MsgBox(48, "出错!", "发生错误,INI文件读取失败!") ;INI文件读取错误将退出
Dim $iChange = 25, $dqyc = 1 ;$iChange 每页显示多少个项目;$dqyc 为当前页次
Dim $zys = Ceiling($var / $iChange)

GUICreate("Listview分页显示", 400, 450)
$ListView1 = GUICtrlCreateListView("编号|内容", 5, 5, 390, 380, -1, BitOR($WS_EX_CLIENTEDGE, $LVS_EX_FULLROWSELECT, $LVS_REPORT))
_GUICtrlListView_SetColumnWidth($ListView1, 0, 100)
_GUICtrlListView_SetColumnWidth($ListView1, 1, 280)
$Button1 = GUICtrlCreateButton("<", 110, 400, 30, 22)
$Button2 = GUICtrlCreateButton(">", 190, 400, 30, 22)
$Label = GUICtrlCreateLabel('1', 143, 405, 18, 17, 0x0002)
GUICtrlCreateLabel('/' & $zys, 162, 405, 23, 17)
$Button3 = GUICtrlCreateButton("返回首页", 30, 400, 80, 22)
$Button4 = GUICtrlCreateButton("跳至尾页", 220, 400, 80, 22)
$Combo = GUICtrlCreateCombo('', 305, 402, 60, 22)
$Combodata = ''
For $i = 1 To $zys
        $Combodata &= '第' & $i & '页|'
Next
GUICtrlSetData(-1, $Combodata, '第1页')
GUISetState()

Go(1) ;首次读取

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3
                        Exit
                Case $Button1 ;上一页
                        Go($dqyc - 1)
                Case $Button2 ;下一页
                        Go($dqyc + 1)
                Case $Button3 ;首页
                        Go(1)
                Case $Button4 ;尾页
                        Go($zys)
                Case $Combo ;下拉选择页次
                        Go(StringRegExpReplace(GUICtrlRead($Combo), '[^\d]', ''))
        EndSwitch
WEnd

Func Go($yc)
        Local $iNo1 = ($yc - 1) * $iChange + 1
        Local $iNo2
        If $yc = $zys Then
                $iNo2 = $var
                SetState(64, 128, 64, 128)
        ElseIf $yc = 1 Then
                $iNo2 = $iNo1 + $iChange - 1
                SetState(128, 64, 128, 64)
        Else
                $iNo2 = $iNo1 + $iChange - 1
                SetState(64, 64, 64, 64)
        EndIf
        Read($iNo1, $iNo2)
        GUICtrlSetData($Label, $yc)
        GUICtrlSetData($Combo, '第' & $yc & '页')
        $dqyc = $yc
EndFunc   ;==>Go

Func SetState($1, $2, $3, $4)
        GUICtrlSetState($Button1, $1)
        GUICtrlSetState($Button2, $2)
        GUICtrlSetState($Button3, $3)
        GUICtrlSetState($Button4, $4)
EndFunc   ;==>SetState

Func Read($iNo1, $iNo2)
        _GUICtrlListView_DeleteAllItems($ListView1)
        For $i = $iNo1 To $iNo2
                GUICtrlCreateListViewItem($var[$i] & '|' & $var[$i], $ListView1)
        Next
EndFunc   ;==>Read

rikthhpgf2005 发表于 2010-6-30 16:51:09

谢谢,楼主是个好人{:face (249):}

410521a 发表于 2010-6-30 17:07:13

真是个大好人` 麻烦再问下``样式 $BS_FLAT为什么不管用
页: [1] 2 3 4 5 6 7 8
查看完整版本: 谁能给个listview的分页显示的例子 ||||基本好了`非常感谢afan [已解决]