کار با لیست باکس و کومبو باکس در وی بی

Majid 3D

Member
من یه لیست باکس یا یک کمبو باکس دارم ... فرض کنید هر دو دارای سه گزینه هم هستند مثل : آبی، قرمز، سبز.
حالا میخوام وقتی کاربر از لیست باکس یا کمبو باکس مثلا گزینه ی آبی رو انتخاب میکنه، رنگ بک گراند به آبی عوض شه.
الان مشکل من فقط اینجاست که نمیدونم چه جوری باید به ویبی بگم :
- اگر گزینه ی انتخاب شده ی کومبو باکس مساوی آبی بود.
 

saalek110

Well-Known Member
از MSDN :
کد:
[SIZE="4"][B]ComboBox Control[/B][/SIZE]
            
[SIZE="2"]
A ComboBox control combines the features of a TextBox control and a ListBox control—
users can enter information in the text box portion or select an item from the list box portion of the control.

Syntax

ComboBox

Remarks

To add or delete items in a ComboBox control,
 use the [COLOR="Blue"]AddItem[/COLOR] or [COLOR="Blue"]RemoveItem[/COLOR] method. 
Set the [COLOR="Blue"]List[/COLOR], [COLOR="Blue"]ListCount[/COLOR], and [COLOR="Blue"]ListIndex[/COLOR] properties to enable a user to access items in the ComboBox. 
Alternatively, you can add items to the list by using the List property at design time.

[B]Note[/B]   A Scroll event will occur in a ComboBox control 
only when the contents of the dropdown portion of the ComboBox are scrolled, 
not each time the contents of the ComboBox change. 
For example, if the dropdown portion of a ComboBox contains five items and the top item is highlighted, 
a Scroll event will not occur until you press the down arrow six times (or the PGDN key once). 
After that, a Scroll event occurs for each press of the down arrow key. However,
 if you then press the up arrow key, 
a Scroll event will not occur until you press the up arrow key six times (or the PGUP key once).
 After that, each up arrow key press will result in a Scroll event.
[/SIZE]
 

saalek110

Well-Known Member
منبع:
http://www.martin2k.co.uk/vb6/posts/vb6post33.php
-----------------------------------------------------------------

برای اضافه کردن به لیست کومبو:
کد:
Private Sub Command1_Click()
Combo1.AddItem "Item"
Combo1.AddItem "Item2"
End Sub
برای تنظیم یک آیتم :
کد:
Private Sub Command2_Click()
Combo1.ListIndex = 1
End Sub
 

saalek110

Well-Known Member
http://msdn2.microsoft.com/en-us/library/fte6kbt2(VS.80).aspx

یک باتون و یک لیبل و یک کومبوباکس به فرم بیافزایید و کد زیر را استفاده کنید:
کد:
Private Sub Form_Load()
    Combo1.AddItem "Nancy Davolio"
    Combo1.ItemData(Combo1.NewIndex) = 12345
    Combo1.AddItem "Judy Phelps"
    Combo1.ItemData(Combo1.NewIndex) = 67890
End Sub


Private Sub Command1_Click()
    Label1.Caption = "Empoyee #" & CStr(Combo1.ItemData(Combo1.ListIndex))
End Sub
بعد اجرا در کومبو دو انتخاب داریم. که کاربر یکی را انتخاب و دکمه را می زند و عددی بعد عبارت Empoyee # چاپ می شود که همان اعدادی است که در رویداد فرم_لود اضافه شده.

===========================
حالا میخوام وقتی کاربر از لیست باکس یا کمبو باکس مثلا گزینه ی آبی رو انتخاب میکنه، رنگ بک گراند به آبی عوض شه.
گمانم شما بتوانید از کد بالا استفاده کنید.
به جای رویداد کلیک باتون از رویدادهای خود کومبوباکس استفاده کنید.
به جای اسامی بالا شما اسامی رنگها را قرار دهید.
و به جای آن اعداد شما شماره های مناسب آن رنگها را جایگزین کنید.
در رویداد مربوطه رنگ بک گراند را تغییر دهید.
 

the_king

مدیرکل انجمن
این کد برنامه مورد نظر شماست :

فرض می کنیم که شما یک ComboBox دارید با نام Combo1.
با این کد شما نام سه رنگ را در لیست آن درج می کنید :
کد:
    With Combo1
        .Clear
        .AddItem "Red"
        .AddItem "Green"
        .AddItem "Blue"
    End With
اکنون با اضافه کردن این کد به رخداد Click، رنگ زمینه تغییر خواهد کرد :
کد:
Private Sub Combo1_Click()
    Me.BackColor = Choose(Combo1.ListIndex + 1, vbRed, vbGreen, vbBlue)
End Sub


برای یک ListBox این کدها تغییری نخواهند کرد، فقط نام Combo1 را با نام کنترل مربوطه عوض کنید، مثلا List1.

کد کامل برنامه به همراه فایل اجرایی exe ضمیمه این پست می باشد.
 

پیوست ها

saalek110

Well-Known Member
جناب علی سعید شما مهارت خاصی در کد نویسی دارید.
و برنامه بالا را خیلی زیبا نوشتید.

=======================
اما یک سئوال راجع به کومبوباکس:
تعریف رویداد غالب را من برای خود چنین گفته ام. رویدادی است که با کلیک روی ابزار کدش باز شود.
مثلا وقتی روی باتون دابل کلیک کنیم رویداد کلیک آن برای کدنویسی باز می شود.
خیلی ابزارها رویداد کلیک همان رویداد غالب است.
بعضی هم رویداد Change .
من جمله همین کومبوباکس.

و سئوال من این است که هم آقای حمید احمدی در آموزشهای خود و هم جناب علی سعید از رویداد کلیک به جای رویداد غالب که Change است استفاده کرده اند.


من می خواستم فقط این را مطرح کنم تا دوستان در ذهنشان باشد.
و احیانا اگر کسی اطلاعات آماده ای داشت اینجا برای استفاده همه بگذارد.

اما خود من اگر بخواهم قضیه را دنبال کنم یا هر دو رویداد را امتحان می کنم و اگر یکی یا هر دو نیاز من را برآورده می کرد از آن استفاده می کردم. و یا سرچ می کردم تا ببینم نظر دیگران چیست.
 

the_king

مدیرکل انجمن
جناب saalek110 عزیز، از لطف شما خیلی ممنونم.

کنترل های CmboBox ترکیبی از TextBox و ListBox هستند بطوری که بر اساس
مقدار مشخصه Style آنها عملکرد متفاوتی دارند :

vbComboDropDown (0)
در این حالت که شیوه پیشفرض می باشد، کاربر هم می تواند متنی را تایپ کند و هم می تواند از لیست آیتمی را
انتخاب کند.
رخداد Change زمانی رخ می دهد که کاربر متنی را تایپ کند.
رخداد Click زمانی رخ می دهد که کاربر آیتمی را از لیست انتخاب کند.

vbComboSimple (1)
در این حالت دیگر دکمه ای برای باز کردن لیست وجود ندارد و کنترل در همان اندازه ای قابل مشاهده است که در هنگام
طراحی ایجاد می شود. کاربر هم متنی را تایپ کند و هم می تواند از لیست آیتمی را انتخاب کند.
بصورت پیشفرض فقط قسمت TextBox کنترل قابل مشاهده است و لیست با کلید های فلش به سمت بالا و پایین مرور می شود.
رخداد Change زمانی رخ می دهد که کاربر متنی را تایپ کند.
رخداد Click زمانی رخ می دهد که کاربر آیتمی را از لیست انتخاب کند.

vbComboDrop-DownList (2)
در این حالت دیگر قسمت TextBox در کنترل وجود ندارد و کاربر فقط مجاز به انتخاب یکی از آیتم های موجود در لیست است.
رخداد Change در این حالت مفهومی ندارد و رخ نمی دهد.
رخداد Click زمانی رخ می دهد که کاربر آیتمی را از لیست انتخاب کند.
 

saalek110

Well-Known Member
جناب علی سعید واقعا عالی بود.

من این تاپیک را محل بحث برای این دو ابزار یعنی لیست باکس و کومبوباکس قرار می دهم.
یعنی اگر کسی سئوالی در این مورد داشت به این تاپیک منتقل می کنم یا اگر مطلب یا سورسی پیدا کردم در این تاپیک می زنم.

تا باعث سرعت در استفاده شود.
دوستان دیگر هم هر مطلبی داشتند اضافه کنند.
 

saeidpes

New Member
جستجو در لیست باکس در ویژوال بیسیک

با سلام

با تشكر از پست the _king

كد ذخيره اطلاعات در ليست باكس خيلي عالي بود مي خواهم كد برنامه جستجو به پروژه اضافه شود كه با بتوان محتويات ليست باكس را با آن جستجو نمود

خيلي ممنون ومتشكرم
 

the_king

مدیرکل انجمن
کافیست که یک دکمه به نام Command4 به فرم اضافه کرده و کد زیر را برای آن بنویسید :
کد:
Private Sub Command4_Click()
    Dim Text As String
    Dim Index As Long
    Dim Count As Long
    Static PrevText As String
    Text = Trim(InputBox("Look for :", "Search", PrevText))
    If Len(Text) > 0 Then
        PrevText = Text
        Index = List1.ListIndex
        For Count = 1 To List1.ListCount
            Index = (Index + 1) Mod List1.ListCount
            If InStr(1, List1.List(Index), Text, vbTextCompare) > 0 Then
                List1.ListIndex = Index
                Exit Sub
            End If
        Next
        MsgBox "Search text is not found.", vbInformation, "Search"
        List1.ListIndex = -1
    End If
End Sub
فرض کنیم که در لیست چند آیتم با یک کلمه کلیدی مشترک وجود دارد، مثلا در نام چند تا از آنها "Ali" وجود دارد.
در اولین جستجو، اولین مورد مشخص می شود و در لیست فعال می گردد.
در جستجوی بعدی عبارتی که دفعه قبل وارد شده پیشفرض جستجو است و عملیات جستجو از آیتم های بعدی
ادامه می یابد.
بدین ترتیب به سادگی مورد های مشابه بعدی هم پیدا می شوند.
 

Majid 3D

Member
مرتب کردن اعداد در لیست باکس ( سریع کمکم کنید )

فرض کنید که من سه تا عدد (1 و 2 و 3) دارم و حالا میخوام کاری کنم که با زدن یک دکمه خود برنامه اونا رو به ترتیب بزرگ کوچیکی در یک لیست باکس قرار بده.چه جوری باید این کار رو کنم ؟
و سوال دوم ... فرض کنید در یک لیست باکس به ترتیب از بالا به پایین اعداد 1و2و3 هست و حالا من میخوام با زدن یک باتن عدد سه به اول لیست باکس بیاد.
خیلی ممنونم.
 

the_king

مدیرکل انجمن
ماژول 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 انجام می شود) :
کد:
    SortListBox List1
و مثلا برای مرتب سازی نزولی List1 با شیوه SortBinary می نویسیم :
کد:
    SortListBox List1, True, SortBinary

روتین Public دومی که در این ماژول وجود دارد MoveListBoxItem است.
این روتین آیتم ای را در یک لیست باکس (یا کومبو باکس) جابجا می کند و سه پارامتر دارد :
پارامتر ListBox لیست باکسی است که قرار است جابجایی در آن صورت پذیرد.
پارامتر Index اندیس آن آیتمی است که می خواهیم جابجا شود.
پارامتر NewIndex اندیس جدیدی است که آیتم می بایستی در آن قرار بگیرد.
(اندیس ها از صفر شروع می شوند)

مثلا کد زیر در لیست باکس List1 آیتم پنجم (اندیس 4 ام خواهد بود چون اندیس ها از صفر شروع می شوند) را به ابتدای
لیست (یعنی اندیس 0) می برد.
کد:
    MoveListBoxItem List1, 4, 0
 

پیوست ها

Ava75

New Member
باعرض سلام و خسته نباشید سوالی داشتم در رابطه با برنامه نویسی وی بی ای در اکسل.
وقتی مسائل به یوزرفرم و ..... رسید مبحث به خوبی درس داده نشد و من در برنامه نویسی مشکل پیدا کرده ام. مثلا در رابطه با اینکه یک سری داده را از کاربر گرفته و آنها را از مین به ماکس مرتب کنیم را هرچه سعی می کنم نمی توانم حل کنم:

Private Sub CommandButton1_Click()
ListBox1.AddItem (TextBox1.Text)
TextBox1.Text = ""
End Sub

Private Sub CommandButton2_Click()
ListBox1.List(0) = Min
For i = 0 To ListBox1.ListCount - 1
If ListBox1.List(i) < ListBox1.List(0) Then
ListBox1.List(i) = Min
End If
Next
ListBox2.List = Min
End Sub
 

Ava75

New Member
باعرض سلام و خسته نباشید سوالی داشتم در رابطه با برنامه نویسی وی بی ای در اکسل.
وقتی مسائل به یوزرفرم و ..... رسید مبحث به خوبی درس داده نشد و من در برنامه نویسی مشکل پیدا کرده ام. مثلا در رابطه با اینکه یک سری داده را از کاربر گرفته و آنها را از مین به ماکس مرتب کنیم را هرچه سعی می کنم نمی توانم حل کنم:

Private Sub CommandButton1_Click()
ListBox1.AddItem (TextBox1.Text)
TextBox1.Text = ""
End Sub

Private Sub CommandButton2_Click()
ListBox1.List(0) = Min
For i = 0 To ListBox1.ListCount - 1
If ListBox1.List(i) < ListBox1.List(0) Then
ListBox1.List(i) = Min
End If
Next
ListBox2.List = Min
End Sub
 

جدیدترین ارسال ها

بالا