کنترل 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 تغییر دهید. از طرح بندی زیر استفاده کنید.
مقدار خاصیت 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 عمودی در سمت راست آن دیگه خواهد شد.
حالا یک کنترل کنندهی رویداد به رویداد SelectedIndexChanged لیست باکس اضافه میکنیم. رویداد SelectedIndexChanged زمانی رخ میدهد که اندیس آیتم انتخاب شده تغییر کند. این رویداد، رویداد پیشفرض لیست باکس است، بنابراین با دوبار کلیک کردن بر روی لیست باکس بطور اتوماتیک یک کنترل کنندهی رویداد برای رویداد SelectedIndexChanged ایجاد میشود. کد زیر را به آن اضافه کنید.
private void listBoxInventory_SelectedIndexChanged(object sender, EventArgs e) { textBoxDescription.Text = products[listBoxInventory.Text]; }
حالا برنامهی خود را اجرا کرده و یک محصول را انتخاب کنید. مشاهده میکنید که توضیحات مربوط به آن محصول در تکست باکس نمایش داده میشود.
به این نکته نیز توجه داشته باشید که همچنین میتوانید از یک String Collections Editor که در درس آخر نمایش داده شده است برای اضافه کردن آیتمها به لیست باکس استفاده کنید.
سلام خسته نباشید , برای اینکه آیتم های لیست باکس رو بصورت نزولی مرتب کنیم باید چه کدی رو بنویسیم ؟
سلام ممنون از راهنماییتون پس الان احتیاج نیست زامارین نصب کنم?
یه چیز دیگه ای هم که متوجه شدم اینه که متد هایی که توی خودش نباشه رو شناسایی نمی کنه چون توی مبحث checklistbox وقتی داشتم کدش رو می نوشتم newvalue و index رو خطا می گرفت نمیدونم این ربطی به اپدیت داره یا نه
سلام من اول می خواستم با برنامه ی اندروید استادیو کار کنم اما سرچ که کردم که ببینم می تونم از طریق ویژوال استادیو با این برنامه کار کنم بهم گفتن باید زامارین نصب کنم وقتی هم در مورد زامارین سرچ کردم توی بعضی از سایت ها نوشته بود باید اول c# رو یاد بگیرم
دلیلش همینه، فکر کنم ویژوال استودیو رو آپدیت کنید درست میشه
سلام، مرسی
شما Xamarin رو هم نصب کردین؟
سلام خسته نباشید من یه سوال درمورد listbox داشتم من کد رو طبق چیزی که توضیح داده بودید نوشتم اما یه خطا میده که ربطی به برنامه نداره البته من می خواستم توی قسمت پرسش و پاسخ بفرستم اما متاسفانه رمز عبورم رو فراموش کردم و کد امنیتی رو هم هرچی وارد می کنم می نویسه اشتباه است حالا من خطای برنامه رو می فرستم امیدوارم منو راهنمایی کنید
سلام خسته نباشید،میخواستم بدونم چجوری میتونم تو سی شارپ وقتی دوتا listbox دارم که اولین لیست باکس ۲۰ مضرب از عدد ۵ و دومین لیست باکس ۲۰ مضرب از عدد ۷ هستند رو مقداراشون رو باهم جمع کنم مثلا اولین مضرب عدد ۵ با اولین مضرب عدد ۷ جمع بشه و تو لیست باکس سوم نمایش داده بشه،به ترتیب ۲۰ تا مضربه عدد ۵ با ۲۰ مضرب ۷ جمع بشه و تو لیست باکس سوم نمایش داده بشه؟؟؟
سلام، مرسی
ممنون میشم سوالتونو تو بخش پرسش و پاسخ مطرح بفرمایید تا دوستان راهنماییتون کنن
w3-farsi.com/forum
سپاس فراوان . قدردان زحمات جنابعالی هستیم.
لطفا راهنمایی بفرمایید .چطور وارد بخش پرسش و پاسخ یا همون انجمن بشیم
وارد لینک زیر بشین
w3-farsi.com/forum
بعد ثبت نام و سوالتونو مطرح کنید.
سلام
اگه سوالم درست نیست ، ببخشید
سلام، سوالتون درسته، جایی که سوالتونو مطرح کردین درست نیست،
ممنون میشم که از این به بعد سوالاتتونو تو بخش پرسش و پاسخ سایت که لینکش بالای همین صفحه است مطرح بفرمایید تو زودتر به جواب برسید
درست ولی تو صفحه من بخش پرسش و پاسخی وجود نداره. شاید بخاطر اینه که من با گوشی همراه دارم از سایت شما استفاده می کنم
سلام آقای ابراهیمی. ضمن سپاس فراوان بخاطر کار بسیار ارزشمند شما. لطفا بفرمایید در کنترل listbox خاصیت selectedvalue چه کاربردی میتواند داشته باشد . اگه امکان داره یه مثال بزنید لطفا
سلام، بسیار ممنون
شما همین کلمات رو به فارسی برگردونید حدود90 درصد کار اون خاصیت، یا متد رو متوجه میشین. این خاصیت که معناش میشه.
این خاصیت مقدار تعریف شده در خاصیت ValueMember آیتم انتخاب شده را بر می گردونه. اینم یه مثال
سلام آقای ابراهیمی
قبل این قطعه کد چه کار دیگه ایی باید انجام بدیم . چون من آزمایش کردم خطا میده .
جناب ابراهیمی عزیز شما این کد بالارو دقیقا از msdnکپی کردین و متاسفانه جواب نمیده. تو بخش پرسش و پاسخ و انجمن هم کسب نتونست جواب بده . لطفا اگه قادر هستید یه قطعه کد برای استفاده از خاصیت selectedvalue مربوط به listbox بنویسید که جواب بده
سلام، چند روز آینده همین پست رو آپدیت می کنم و یه مثال قابل فهم و ساده ازش میذارم