在用到Windows的資源管理器的時(shí)候,當(dāng)我們需要按照文件的類型或名稱排序的時(shí)候只要用鼠標(biāo)點(diǎn)擊一下相應(yīng)的標(biāo)題欄,系統(tǒng)會(huì)按照升序或降序交替排序,這完全取決于用戶鼠標(biāo)點(diǎn)擊的奇偶數(shù)。如此方便的操作何不用到我們的數(shù)據(jù)窗口中——實(shí)現(xiàn)按某列的動(dòng)態(tài)排序。 d9H]cV2 / {IFv|V \MPp<N7 為了實(shí)現(xiàn)上述功能,程序首先需要用到一個(gè)全局變量(相對(duì)于PB來說可以用窗體變量),用它來控制連續(xù)兩次點(diǎn)擊之間的排序方向。因?yàn)樽侄蔚呐判蚍较蛑挥猩蚝徒敌騼煞N,所以我們可以用一個(gè)Boolean型。本例中是Boolean ib_flag。接著在數(shù)據(jù)窗口控件的Clicked事件中寫上如下代碼 \ew;h4y pnjLjwo /*****************************程序代碼******************************/ v&:4 ZO_/ e#hdo3" String ls_column, ls_sort }tYIBq Wp!*7av ls_column = this.GetObjectAtPointer() // 得到鼠標(biāo)按下位置的對(duì)象名 VRsH0DE JJ?ye}- ls_column = left(ls_column, len(ls_column) - 2) // 得到列標(biāo)題名字 O,#5ke>HQ .w`i k if not Lower(right(ls_column, 2)) = "_t" then return X,#I<L{\{ 3W1j m>w5 // 如果不是缺省的列標(biāo)題,即以“_t”結(jié)尾或鼠標(biāo)根本沒有點(diǎn)在列標(biāo)題上則退出 w .U F[3k $[[=>eG ls_column = left(ls_column, len(ls_column) - 2) // 去掉列標(biāo)題末尾的“_t”,得到有效的列標(biāo)題名 SZ}{a li^JFK> // 進(jìn)行升序和降序的切換 ym~D ?/[z*W3& if ib_flag then m<x1 a"h kF.5qt {Dc ls_sort = ls_column + " A" // 升序 / PT0Ifi 54^qX(w else 8U(9* SB U*X NVf ls_sort = ls_column + " D" // 降序 $8[ K9 hlcn<Ds end if Qo)5P~h*- >>y%HPK6 ib_flag = not ib_flag // 為下一次排序準(zhǔn)備 &~70|NYvQ sugA|\4 ls_sort = ls_sort H2+hem,<< <~{|tdpf' this.setsort(ls_sort) V>c=@pH C*ap5cBo this.sort() PDaMU$Uj3 !d8m#Jr0 /*****************************結(jié)束******************************/ w[l~jf=VA oU ={c>22 U$fn(OuF_ '1"jY` 注:這里所敘述的數(shù)據(jù)窗口中列的動(dòng)態(tài)排序是以系統(tǒng)默認(rèn)的列標(biāo)題名為前提,即在標(biāo)題欄中列標(biāo)題名字是以“_t”結(jié)尾。 |HXvX@d
|