کنترل CheckedListBox

کنترل CheckedListBox، شبیه کنترل ListBox است، با این تفاوت که در کنار هر آیتم از آن یک کنترل CheckBox نیز وجود دارد. شما می‌توانید هر آیتم را مانند ListBox انتخاب کنید، بعلاوه اینکه می‌توانید هر آیتم را توسط CheckBox کنار آن تیک بزنید.
checked-list-box-01
خواص و متدهای کنترل ListBox در کنترل CheckedListBox نیز وجود دارند. اما کنترل CheckedListBox دارای خواصی منحصر بفرد نیز می‌باشد.

خاصیت توضیحات
CheckedItems مجموعه‌ای از آیتم‌های تیک خورده است.
CheckOnClick مشخص می‌کند که آیا جعبه کنار آیتمی که انتخاب شده است تیک بخورد یا نه؟
ThreeDCheckBoxes حالت نمایش CheckBox را مشخص می‌کند، این خاصیت دو مقدار دارد.
flat : ظاهر چک باکس دو بعدی است.
Normal : ظاهر چک باکس 3 بعدی است.

در زیر خواص منحصر به فرد کنترل CheckedListBox آمده است:

متد توضیحات
GetItemChecked() به ما می‌گوید که یک آیتمی با یک اندیس مشخص چک خورده است یا خیر.
GetItemCheckState() مقدار CheckState، آیتمی با یک اندیس مشخص را بر می‌گرداند.
SetItemChecked() آیتمی با اندیس مشخص را تیک می زند یا تیک آنرا بر می‌دارد.
SetItemCheckState() حالت چک، یک آیتم با اندیس مشخص را تعیین می‌کند.

حالا برنامه‌ای می‌سازیم که در آن یک کنترل CheckedListBox بکار رفته است. یک فرم را ساخته و یک کنترل CheckedListBox بر روی آن قرار دهید و مقدار خاصییت Name آنرا به checkedListBoxProducts تغییر دهید. حالا یک ListBox را به فرم اضافه کرده و مقدار خاصیت نام آنرا به listBoxShoppingCart تغییر دهید. فرم شما باید چیزی شبیه به این باشد.
checked-list-box-02
در پنجره‌ی خواص (Properties) خاصیت Items کنترل CheckedListBox را پیدا کنید. بر روی دکمه کنار آن کلیک کنید تا پنجره‌ی String Collection Editor باز شود. مقادیر زیر را به آن اضافه کنید.
checked-list-box-03
بر روی OK کلیک کنید. حالا شما آیتم‌هایی را که به آن اضافه کرده‌اید را مشاهده می‌کنید.
checked-list-box-04
رویداد پیش فرض CheckedListBox رویداد SelectedIndexChanged است. که دقیقاً شبیه رویدادی با همین نام در ListBox است. حال ما می‌خواهیم آیتم‌های تیک خورده را به shopping cart اضافه کنیم. کنترل CheckListBox یک رویداد به نام ItemCheck دارد، زمانی این رویداد رخ می‌دهد که حالت Check یکی از آیتم‌ها تغییر کند. از آنجایی که این رویداد، رویداد پیشفرض کنترل CheckedListBox نیست، ما نمی‌توانیم به سادگی با دوبار کلیک کردن بر روی این کنترل، این رویداد را ایجاد کنیم. برای اینکار ما باید به بخش Events در پنجره‌ی خواص (Properties) رفته و رویداد ItemCheck را پیدا کنیم.
checked-list-box-05
بر روی ItemCheck دوبار کلیک کرده تا یک کنترل کننده‌ی رویداد برای آن ساخته شود. حالا این کدها را به آن اضافه کنید.

private void checkedListBoxProducts_ItemCheck(object sender, ItemCheckEventArgs e)
{
    if (e.NewValue == CheckState.Checked)
        listBoxShoppingCart.Items.Add(checkedListBoxProducts.Items[e.Index]);
    else if (e.NewValue == CheckState.Unchecked)
        listBoxShoppingCart.Items.Remove(checkedListBoxProducts.Items[e.Index]);

}

در داخل کنترل کننده‌ی رویداد ItemCheck یک پارامتر دومی از نوع ItemCheckEventArgs نیز وجود دارد که خواص CurrentValue (مقدار فعلی)، NewValue (مقدار جدید) و Index (اندیس) را در بر می‌گیرد. خاصیت CurrentValue مقداری از خاصیت CheckState آن آیتم است که رویداد ItemCheck را قبل از تغییر CheckState راه اندازی می‌کند.

خاصیت NewValue مقداری جدیدی است که خاصیت CheckState آن آیتم به خود می‌گیرد. خاصیت Index، اندیس آیتم بر مبنای صفر است (یعنی اندیس‌ها از صفر شروع می‌شوند). ما امتحان می‌کنیم اگر مقدار NewValue ی آیتم برابر با Checked بود، آن آیتم به Shopping Cart اضافه شود و اگر مقدار NewValue برابر با Unchecked بود، آیتم مورد نظر از Shopping Cart حذف شود. در تصویر زیر مشاهده می‌کنید که آیتم‌هایی که تیک زده شده‌اند به Shopping Cart اضافه شده‌اند.
checked-list-box-06