ماژول ListBoxExt.bas را که ضمیمه این پست شده به پروژه تان اضافه کنید.
این ماژول دو روتین Public دارد که برای ListBox ها و ComboBox ها طراحی شده است:
روتین
SortListBox می تواند هر لیست باکسی (یا کومبو باکسی) را بصورت دلخواه شما مرتب کند.
در پیاده سازی آن از الگوریتم مرتب سازی Quick Sort استفاده شده تا در لیست های بزرگ سرعت مناسبی داشته باشد.
این روتین سه پارامتر دارد که عبارتند از :
پارامتر
ListBox لیست باکسی است که قرار است مرتب شود.
پارامتر
Descending اختیاری است و اگر True باشد بجای مرتب سازی صعودی، مرتب سازی نزولی انجام می شود.
پارامتر
Method اختیاری است و شیوه مقایسه عناصر را مشخص می کند که سه حالت دارد :
SortBinary ساده ترین شیوه مقایسه دو عنصر است و بر اساس کد باینری کاراکتر ها عمل می کند.
مثلا کاراکتر "B" از کاراکتر "a" کوچکتر است چون کد باینری کاراکتر "B" برابر 66 است و کد باینری کاراکتر "a" برابر 97 است.
یا مثلا رشته "100" از رشته "2" کوچکتر است، چون کد کاراکتر "1" (اولین کاراکتر رشته "100") از کد کاراکتر "2" کوچکتر است.
SortText شیوه منطقی تری است، چون در هنگام مرتب سازی حروف الفبا حروف بزرگ و کوچک را در یک گروه
قرار می دهد.
مثلا کاراکتر "B" از کاراکتر "a" بزرگتر است و رشته "ALI" با رشته "ali" برابر است.
اما رشته "100" همچنان از رشته "2" کوچکتر است، چون کد کاراکتر "1" (اولین کاراکتر رشته "100") از کد کاراکتر "2"
کوچکتر است.
SortIntuitive مرتب سازی هوشمندی است که حالت پیشفرض روتین است.
این روتین تقریبا مشابه شیوه ای است که ویندوز XP در مرتب سازی نام فایلها بکار می برد.
بر اساس این الگوریتم این رشته ها بر اساس ترتیب صعودی به درستی مرتب شده اند :
کد:
00001
02
003
04
00005
Date 1386/002/14
DATE 1386/4/7
Date 1386/0005/0021
date 1386/05/22
Date 1386/012/009
dAtE 1387/1/10
fILEnAME006
fileNAME7
FileName08
filename00009
FILEname10
مثلا برای مرتب سازی List1 می نویسیم (بصورت پیشفرض مرتب سازی صعودی با شیوه SortIntuitive انجام می شود) :
و مثلا برای مرتب سازی نزولی List1 با شیوه SortBinary می نویسیم :
کد:
SortListBox List1, True, SortBinary
روتین Public دومی که در این ماژول وجود دارد
MoveListBoxItem است.
این روتین آیتم ای را در یک لیست باکس (یا کومبو باکس) جابجا می کند و سه پارامتر دارد :
پارامتر
ListBox لیست باکسی است که قرار است جابجایی در آن صورت پذیرد.
پارامتر
Index اندیس آن آیتمی است که می خواهیم جابجا شود.
پارامتر
NewIndex اندیس جدیدی است که آیتم می بایستی در آن قرار بگیرد.
(اندیس ها از صفر شروع می شوند)
مثلا کد زیر در لیست باکس List1 آیتم پنجم (اندیس 4 ام خواهد بود چون اندیس ها از صفر شروع می شوند) را به ابتدای
لیست (یعنی اندیس 0) می برد.
کد:
MoveListBoxItem List1, 4, 0