کنترل 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 کلیک کنید:
combo-box-control-12-20-10-01

در پنجره‌ی StringCollectionEditor ، نام‌هایی را که در تصویر زیر می‌بینید را وارد کرده و بر روی OK کلیک کنید.
combo-box-control-12-20-10-02
مقدار مشخصه‌ی 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);

برنامه را اجرا کرده و یک نام را انتخاب کنید. وقتی که شما نامی را انتخاب می‌کنید، برنامه بلافاصله یک پیغام را به شما نشان می‌دهد که در آن به نام انتخاب شده خوش آمدگویی می‌کند.
combo-box-control-12-20-10-03

وقتی که شما یک نام را انتخاب می‌کنید، رویداد 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 می‌تواند یک مجموعه یا آرایه را قبول کرده و با آنها لیست آیتم‌های مربوط به خود را پر کند.