کنترل ListBox

کنترل ListBox برای نمایش لیستی از رشته‌ها که قابل انتخاب هستند، استفاده می‌شود. به طور پیش فرض شما فقط می‌توانید یک آیتم را انتخاب کنید. کنترل ListBox بهترین گزینه برای مواقعی است که شما می‌خواهید تعداد زیادی آیتم را نمایش دهید. در جدول زیر برخی از خواص کنترل ListBox را مشاهده می‌کنید:

خواص توضیح
ColumnWidth وقتی که مقدار خاصیت MultiColumn برابر با True باشد، این خاصیت پهنای هر ستون را مشخص می‌کند.
DataSource منبع داده‌های را که در ListBox نمایش داده می‌شوند را، مشخص می‌کند.
Items حاوی آیتم‌هایی است که در ListBox نمایش داده می‌شوند.
MultiColumn مشخص می‌کند که ListBox حالت چند ستونی را پشتیبانی می‌کند یا خیر.
SelectedIndex اندیس آیتم انتخاب شده را مشخص می‌کند.
SelectedIndices حاوی اندیس آیتمهای انتخاب شده است.
SelectedItem آیتم انتخاب شده را به عنوان یک شیء بر می‌گرداند.
SelectedItems مجموعه‌ای از اشیاء آیتم‌های انتخاب شده را بر می‌گرداند.
SelectionMode تعداد آیتم‌هایی که شما در یک لحظه می‌توانید انتخاب کنید را مشخص می‌کند.
SelectionMode.None – هیچ آیتمی را نمی‌توانید انتخاب کنید.
SelectionMode.One – فقط یک آیتم را می‌توانید انتخاب کنید.
SelectionMode.MultiSimple – شما می‌توانید چند آیتم را به سادگی با کلیک کردن بر روی آنها انتخاب کنید.
SelectionMode.MultiExtended – شما می‌توانید آیتم‌های مختلفی را در با نگه داشتن کلیدهای Ctrl ،Shift و همچنین کلیدهای مکان نما انتخاب کنید.
ScrollAlwaysVisible این خاصیت بدون توجه به آیتم‌های انتخاب شده در ListBox ،Scroll Bar را همیشه نمایش می‌دهد.
Sorted آیتم‌های ListBox را براساس حروف الفبا و یا بر اساس ترتیب صعودی مشخص می‌کند.
Text اگر از یک مقدار رشته‌ای استفاده شود، اولین آیتمی که با آن همخوانی داشته باشد، انتخاب می‌شود. این خاصیت، متن اولین آیتم انتخاب شده را بر می‌گرداند.

در جدول زیر متدهای مفیدی که شما می‌توانید آنها را بکار ببرید، آورده شده است.

متدها توضیح
ClearSelected() همه‌ی آیتم‌های انتخاب شده‌ی ListBox را از حالت انتخاب در می‌آورد.
FindString() اولین آیتم ListBox را که با رشته‌ی مشخص شده شروع شده باشد را پیدا می‌کند. جستجو از اندیس مشخص شده شروع می‌شود.
FindStringExact() اولین آیتمی از ListBox که دقیقاً برابر با رشته‌ی مورد نظر باشد را، انتخاب می‌کند.
GetSelected() به ما می‌گوید که آیتمی که اندیس مشخص شده را داراست انتخاب شده است یا خیر.
SetSelected() آیتمی را که اندیس مشخص شده را داراست انتخاب و یا از حالت انتخاب در می‌آورد.

برای دستکاری آیتم‌های درون یک لیست باکس، ما از خاصیت Items که از نوع ObjectCollection است استفاده می‌کنیم. شما می‌توانید از مجموعه‌ای از متدها مثل Remove ،Add و Clear استفاده کنید. یک فرم را طراحی کرده و یک ListBox و TextBox به آن اضافه کنید. مقدار خاصیت Multiline کنترل TextBox را به True تغییر دهید. از طرح بندی زیر استفاده کنید.
list-box-01
مقدار خاصیت Name کنترل ListBox را به listBoxInventory و کنترل TextBox را به textBoxDescription تغییر دهید. بر روی فرم دوبار کلیک کرده تا یک کنترل کننده رویداد (Event Handler) Load به آن اضافه شود. کدهای زیر را به آن اضافه کنید.

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace WindowsFormTutorial
{
    public partial class Form1 : Form
    {
        private Dictionary<string, string> products;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            products = new Dictionary<string, string>();
            products.Add("Shampoo", "Makes your hair beautiful and shiny.");
            products.Add("Soap", "Removes the dirt and germs on your body.");
            products.Add("Deodorant", "Prevents body odor.");
            products.Add("Toothpaste", "Used to clean your teeth.");
            products.Add("Mouthwash", "Fights bad breath.");

            foreach (KeyValuePair<string, string> product in products)
            {
                listBoxInventory.Items.Add(product.Key);
            }
        }
    }
}

ما مجموعه‌ای به نام Dictionary که یک کلید رشته‌ای و یک مقدار رشته‌ای دارد را ایجاد کرده‌ایم. در داخل کنترل کننده‌ی رویداد Load فرم، ما تعدادی محصول را به همراه توضیحاتی در مورد آنها به این مجموعه اضافه کرده‌ایم. با استفاده از حلقه‌ی Foreach، ما نام هر محصول را به خاصیت Items لیست باکس اضافه می‌کنیم. به این نکته توجه کنید که هر آیتم در کلکسیون عمومی Dictionary از نوع KeyValuePari<TKey, TValue> می‌باشد. وقتی برنامه را اجرا می‌کنید، شما پنج محصول را در داخل لیست باکس مشاهده می‌کنید. به یاد داشته باشید در صورتیکه ارتفاع لیست باکس شما برای نمایش آیتم‌های آن کافی نباشد، یک نوار Scroll عمودی در سمت راست آن دیگه خواهد شد.
list-box-02
حالا یک کنترل کننده‌ی رویداد به رویداد SelectedIndexChanged لیست باکس اضافه می‌کنیم. رویداد SelectedIndexChanged زمانی رخ می‌دهد که اندیس آیتم انتخاب شده تغییر کند. این رویداد، رویداد پیشفرض لیست باکس است، بنابراین با دوبار کلیک کردن بر روی لیست باکس بطور اتوماتیک یک کنترل کننده‌ی رویداد برای رویداد SelectedIndexChanged ایجاد می‌شود. کد زیر را به آن اضافه کنید.

private void listBoxInventory_SelectedIndexChanged(object sender, EventArgs e)
{
    textBoxDescription.Text = products[listBoxInventory.Text];
}

حالا برنامه‌ی خود را اجرا کرده و یک محصول را انتخاب کنید. مشاهده می‌کنید که توضیحات مربوط به آن محصول در تکست باکس نمایش داده می‌شود.
list-box-03
به این نکته نیز توجه داشته باشید که همچنین می‌توانید از یک String Collections Editor که در درس آخر نمایش داده شده است برای اضافه کردن آیتم‌ها به لیست باکس استفاده کنید.