کنترل ComboBox
کنترل ComboBox (نوار کرکرهای) روش دیگری است که به کاربر اجازه دهید از بین گزینههای مختلف یکی را انتخاب کند. کنترل ComboBox شبیه یک کنترل TextBox است که در سمت راست آن یک دکمه قرار دارد. وقتی بر روی دکمهی آن کلیک شود، ComboBox یک نوار کرکرهای را که حاوی یک لیست از گزینههای مختلف است را نمایش میدهد. کاربر میتواند از بین این گزینهها یکی را انتخاب کند. مورد انتخاب شده به متن داخل ComboBox تبدیل میشود. در جدول زیر برخی از خواص این کنترل را مشاهده میکنید:
خصوصیت | توضیح | |
DataSource | لیست دادههایی که این کنترل برای گرفتن دادههایش از آنها استفاده میکند. | |
DropDownHeight | ارتفاع نوار کرکرهای بر حسب پیکسل را مشخص میکند. | |
FormatString | قالبی که نحوهی نمایش مقادیر را مشخص میکند. | |
Items | میتوان آیتمهایی را برای نمایش در درون ComboBox را در داخل این خاصیت قرارداد. | |
Sorted | مشخص میکند که آیتمهای ComboBox مرتب شوند یا خیر. | |
Text | متن پیشفرضی است که در حالتی که هیچ آیتمی انتخاب نشده است، نمایش داده میشود. | |
SelectedIndex | شماره (index) آیتم انتخاب شده را مشخص میکند. هر آیتم یک شماره دارد که از 0 تا یک واحد کمتر تعداد آیتمها است. مقدار 1- مشخص میکند که هیچ آیتمی انتخاب نشده است. | |
SelectedItem | آیتم انتخاب شده را بر میگرداند. |
در جدول زیر رویدادهای مربوط به ComboBox را مشاهده میکنید. رویداد پیش فرض آن SelectedIndexChanged است.
رویداد | توضیح | |
Click | زمانی که بر روی یکی از اجزای آن کلیک شود، این رویداد رخ میدهد. | |
DropDown | زمانی که نوار کرکرهای نمایش داده میشود، این رویداد رخ میدهد. | |
DropDownClosed | زمانی که نوارکرکره ای بسته میشود، این رویداد رخ میدهد. | |
SelectedIndexChanged | زمانی که مقدار خاصیت SelectedIndex تغییر میکند، این رویداد رخ میدهد. |
در مثال زیر با کاربرد ComboBox آشنا میشوید. ابتدا در داخل فرم یک ComboBox قرار دهید. مقدار خاصیت Name آنرا به comboBoxNames تغییر دهید. به پنجرهی Properties رفته و خاصیت Items را پیدا کنید. شما یک دکمه را به همراه سه نقطه مشاهده میکنید. بر روی آن کلیک کرده تا قسمت String Collection Editor باز شود. همچنین شما میتوانید بر روی Edit Items در قسمت پایین پنجرهی Properties کلیک کنید:
در پنجرهی StringCollectionEditor ، نامهایی را که در تصویر زیر میبینید را وارد کرده و بر روی OK کلیک کنید.
مقدار مشخصهی Text کنترل ComboBox را به Choose a name تغییر دهید بنابراین مقدار پیش فرض آن وقتی که هنوز آیتمی انتخاب نشده باشد “Choose a name” خواهد بود. بر روی ComboBox دوبار کلیک کنید . VS/VCE یک کنترل کنندهی رویداد (Event Handler) برای رویداد SelectedIndexChanged میسازد. کد زیر را در داخل کنترل کنندهی (Event Handler) رویداد وارد کنید .
string selectedName = comboBoxNames.SelectedItem.ToString(); MessageBox.Show("Hello " + selectedName);
برنامه را اجرا کرده و یک نام را انتخاب کنید. وقتی که شما نامی را انتخاب میکنید، برنامه بلافاصله یک پیغام را به شما نشان میدهد که در آن به نام انتخاب شده خوش آمدگویی میکند.
وقتی که شما یک نام را انتخاب میکنید، رویداد SelectedIndexChanged رخ میدهد. خاصیت SelectedItem تمامی دادههای مربوط به آیتم انتخاب شده را در بر دارد. از آنجایی که این خاصیت یک شیء (Object) را بر میگرداند، ما باید مقادیر آنرا به وسیلهی متد ToString() به رشته تبدیل کرده و در داخل یک متغیر String قرار دهیم. (هرچند شما میتوانید از خاصیت Text استفاده کنید ولی ما برای این مثال از SelectedItem استفاده کردهایم). سپس ما یک متن را که حاوی پیغام خروجی است را نمایش میدهیم. خاصیت SelectedIndex اندیس (Index) آیتم انتخاب شده را مشخص میکند.
اندیس آیتم اول 0 است و این اندیس برای آیتمهای بعدی به اندازهی یک واحد اضافه میشود. به طوریکه اندیس هر آیتم از آیتم قبلی خودش یک واحد بیشتر است. اندیس آخرین آیتم (1- تعداد آیتمها) است. بنابراین اگر ما 10 آیتم داشته باشیم، اندیس آخرین آیتم 9 است. اگر هیچ آیتمی انتخاب نشده باشد، اندیس آن برابر با 1- خواهد بود. اگر شما میخواهید در زمان اجرای برنامه آیتمهایی را اضافه کنید، میتوانید از خاصیت Items کنترل ComboBox استفاده کنید. خاصیت Items یک متد به نام Add دارد که به وسیلهی آن میتوانید به ComboBox آیتمهای جدیدی را اضافه کنید.
string[] names = { "Johnny", "Kenneth", "Mark", "Ralph", "Sussie" }; //Add each names from the array to the combo box foreach(string name in names) { comboBoxNames.Items.Add(name); }
شما میتوانید لیستی از نامها را در یک آرایهی رشتهای قرار دهید. سپس با استفاده از یک حلقهی Foreach آن نامها را به ComboBox اضافه کنید. همچنین شما میتوانید از خاصیت DataSource نیز استفاده کنید.
comboBoxNames.DataSource = names;
خاصیت DataSource میتواند یک مجموعه یا آرایه را قبول کرده و با آنها لیست آیتمهای مربوط به خود را پر کند.
سلام دوست عزیز… سوالتونو توی انجمن (forum.w3-farsi.com) مطرح بفرمایید.
ممنون
یه سوال اگه بخواهیم برنامه طوری باشد که حروفی را از کاربر بگیرد و وقتی روی دکمه کلیک کرد اگر مقدار تکراری بود آن را در combobox چاپ نکند