آموزش سی شارپ C# قسمت دوازدهم

قصد دارم از این جلسه به بعد آموزش هامون رو کاربردی تر کنیم !  یعنی توی هر جلسه بعضی از ابزار های ویندوز فرم رو خدمتتون توضیح بدم تا بتونیم توی پروژه هامون ازشون استفاده کنیم !

اول از همه با یک لیست باکس شروع میکنیم :

اگه یک مقدار با کامپیوتر یا صفحات وب یا موبایل و یا ... کار کرده باشید به احتمال خیلی زیاد لیست هایی رو مشاهده کردین که مقادیری رو نشون میدن و یا میشه بهشون مقداری اضافه کرد و حذف یا ویرایش کرد و یا با کلیک راست رو اونها و انتخاب گزینه بیشتر , موارد اضافی رو نشون میدن !!

خب توی سی شارپ میشه همه این قابلیت ها رو با استفاده از لیست باکس و البته کنترل های دیگه پیاده سازی کرد !!

ابتدا یک لیست باکس , یک تکست باکس و یک کامند به فرم اضافه کنید !! ( سعی کنید رنگ فرم رو عوض کنید و کنترل هایی که اضافه کردین رو یک مقدار مرتب کنید و بهشون نظم بدین . همین چند تا کار کوچیک میتونه ضاهر برنامه رو از 0% به 40% تا 60% درصد ارتقاء بده !! )

بعد از اون روی دکمه دابل کلیک کنید تا به قسمت کد نویسی هدایت بشید . در نهایت کد زیر رو تایپ کنید ( به هیچ وجه کپی نکنید چون بدون شک یاد نمیگیرید !! ) :

 listBox1.Items.Add(textBox1.Text);

با اینکه خیلی ساده ست و بنظر نیاز به توضیح نداره , باید بگم که با استفاده از کد بالا ما مقدار تکست باکس رو درون لیست اضافه کردیم :) !!

خب معمولا کاربر بعد از اضافه کردن یک مقدار به یک لیست دوست داره تا مقدار جدیدی رو هم اضافه کنه , پس برای این کار باید مقدار تکست باکس رو خالی کنیم و البته نشان گر رو به تکست باکس هدایت کنیم ( که کاربر بتونه مستقیما و بدون جابجای موس , توی تکست باکس مقدار مورد نظرش رو وارد کنه ! )

 textBox1.Clear();
textBox1.Focus();

فکر میکنم این هم واضح باشه ! . توی خط اول مقدار درون تکست باکس رو با استفاده از متد Clear پاک کردیم و توی خط دوم با استفاده از متد Focus نشانگر رو به تکست باکس منتقل کردیم !

از اونجایی که انسان ممکن الخطا هست , ممکنه کاربر یک مقدار رو اشتباه وارد کرده باشه و بخواد اونو از لیست پاک کنه . اصلا نگران نباشید , این کار هم به سادگی امکان پذیر هست (^__^) . کافیه با داشتن شماره خونه (اندیس) اون آیتم یا مقداری که اشتباه هست و یا به هردلیل دیگه ای باید پایک بشه و با استفاده از متد RemoveAt اونو پاک کنیم . دقت کنید که برای پاک کردن هم مثل اضافه کردن , باید از ListBox1.Items استفاده کنیم :

 listBox1.Items.RemoveAt(0);

یک توضیحی در مورد آیتم های لیست باکس بدم :

اگه یادتون باشه توی جلسه پیش در مورد آرایه ها گفتیم . استاندارد تعریف آرایه ها توی اکثر زبان های برنامه نویسی این هست که بصورت پیش فرض از اندیس یا خانه شماره 0 شروع میشن ! . یعنی اگر توی تعریف آرایه ما نوشته باشیم :

 int[] a = new int[10];

اولین خانه شماره 0 و آخرین خانه شماره 9 هست و خانه ای با شماره اندیس 10 وجود نخواهد داشت !! .

این استاندارد توی لیست باکس هم وجود داره . در واقع میشه گفت توی لیست باکس یک آرایه از مقادیر هست که میشه اون مقادیر رو اضافه کرد و یا حذف کرد !!

پس اگه با توجه به توضیحات بالا , دستوری که بالا برای حذف یک آیتم از لیست باکس گفتم , فقط و فقط اولین آیتم رو حذف میکنه . یعنی اگر ما 100 آیتم داشته باشیم و 10 بار روی دکمه کلیک کنیم , توی هر بار اولین آیتم موجود توی لیست باکس حذف میشه ! ( و البته اگر هنگام اجرای متد RemoveAt هیچ آیتمی توی لیست باکس وجود نداشته باشه با پیغام خطا مواجه میشیم !! )

خب تا اینجا متوجه شدیم که چطوری یک آیتم رو اضافه و یا حذف کنیم , ولی بطور معمول ما همیشه اولین آیتم رو حذف نمیکنم و انتخاب رو به عهده خود کاربر میذاریم ! یعنی فقط اون آیتمی حذف میشه که کاربر با موس روی اون کلیک کرده باشه !

خب برای اینکار باید بدونیم کاربر روی کدوم آیتم کلیک کرده , که براحتی میتونیم با استفاده از پراپرتی SelectedInex شماره اندیس اون آیتم رو بدست بیاریم ! دقت کنید که این پراپرتی درون خوده لیست باکس هست و اینجا دیگه نیاز به آیتم ها نداریم

حالا با استفاده از کد زیر میتونیم متوجه بشیم که کدوم آیتم انتخاب شده و بعد آیتم مورد نظر رو حذف کنیم . به کد زیر توجه کنید :

 listBox1.Items.RemoveAt(listBox1.SelectedIndex);

یک مسئله ی دیگه که توی استفاده از لیست باکس ها مهم هست اینه که ما باید بتونیم مقدار درون اون آیتمی رو که کاربر انتخاب کرده بازیابی کنیم و یا به عبارت دیگه , اون مقدار رو بخونیم !

مثلا یکجا نیاز هست که کاربر بعد از کلیک روی یکی از آیتم های لیست , مقدار اون آیتم رو توی تکست باکس ببینه :

 textBox1.Text = listBox1.SelectedItem.ToString();

به همین سادگی تونستیم مقدار درون لیست رو بازیابی کنیم !

اگر هم بخوایم خودمون با استفاده از کد نویسی آیتم رو انتخاب کنیم ( برای مثال وقتی که برنامه اجرا شد بصورت خودکار یک آیتم انتخاب شده باشه ) میتونیم SelectedIndex رو برابر اندیس اون آیتم مورد نظر قرار بدیم !

آموزش کار با listbox در سی شارپ

عکس 1 - کدهای گفته شده برای کار با لیست باکس

اگر بخوایم کدهایی که تا به حال نوشتیم رو خلاصه کنیم به این میرسیم :

 

 private void button1_Click(object sender, EventArgs e)

{
    listBox1.Items.Add(textBox1.Text);

    textBox1.Clear();

    textBox1.Focus();
}

private void button2_Click(object sender, EventArgs e)

{
    int x = listBox1.SelectedIndex;

    listBox1.SelectedIndex++;

    listBox1.Items.RemoveAt(x);
}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)

{
    textBox1.Text = listBox1.SelectedItem.ToString);
}

 

اول از همه دقت کنید که button1_click مربوط به کامند افزودن و button2_click هم ماله کامند حذف کردن هست !

 

اگه دقت کنید میبینید که توی قسمت حذف کردن یک تغیراتی بوجود آوردم ! ابتدا اندیس آیتم انتخاب شده رو در یک متغیر ذخیره کردم و بعد آیتم انتخاب شده رو یکی اضافه کردم و بعد از اون , آیتم رو حذف کردم .

دلیلش این هست که اگر شما بدون تغییر آیتم انتخاب شده بخواید اونو حذف کنید , در حالت عادی مشکلی پیش نمیاد ولی وقتی که توی listBox1_SelectedIndexChanged دستوراتی نوشتیم , بدون شک مشکل پیش میاد و با خطا مواجه میشیم , اون هم به این دلیل هست که مقدار SelecetItem برابر خالی میشه ! ( پیشنهاد میکنم خودتون امتحان کنید ) .

خب در پایان اگر علاقه داشتید بجای لیست باکس از ComboBox استفاده کنید ( اگر نمیدونید کامبوباکس چی هست : شبیه همون لیست باکس هست با این تفاوت که کامبوباکس شبیه یک لیست کشویی هست که باز و بسته میشه , مثلا برای دریافت نام شهر یا استان , و یا جنسیت و ... ازش استفاده میشه ) کافیه یک کامبوباکس رو به فرم اضافه کنید , و بجای اینکه نام لیست باکس رو توی دستورات بالا بنویسید , کافیه نام کامبوباکس رو بنویسید !

مثلا :

 private void button1_Click(object sender, EventArgs e)

{
    comboBox1.Items.Add(textBox1);

    textBox1.Clear();

    textBox1.Focus();
}

private void button2_Click(object sender, EventArgs e)

{
    int x = comboBox1.SelectedIndex;

    comboBox1.SelectedIndex++;

    comboBox1.Items.RemoveAt(x);
}

private void comboBox1_SelectedIndexChanged (object sender, EventArgs e)
{
    textBox1.Text = listBox1.SelectedItem.ToString();

 الان همون دستورات قبلی رو برای کامبوباکس نوشتیم ! به همین سادگی

فکر میکنم برای این جلسه تا اینجا کافی باشه . ممنون از توجهتون !

برای درج نظر و یا طرح سوالات خود لطفا در سایت ثبت نام کنید و یا وارد سایت شوید

نظرات کاربران

4 سال پیش

عباس رفیعیان

خیلی خیلی ممنونم از بیان گرمتون که واقعا جذب میکنه ادمو واسه یادگیری

یه سوال داشتم در این بحث

کاربر اطلاعاتی رو وارد 

listbox 

 میکنه و بعد متوجه میشه  اطلاعات قبلا وارد شده و تکرارین

خب چرا هنگام وارد کردن اطلاعات این مقدار ها چک نشن و در صورتی که قبلا وارد نشدن به 

listbox

اضافه بشن

من در کد نویسی مبتدی هستم شاید کار ساده ای باشه ولی نه واسه من 

در این مورد سعی کرده ام مقداری کد هم  نوشتم ولی جواب نداد لطفا راهنمایی کنید

برای این مطلب تاکنون نظری ارسال نشده است. شما اولین نفر باشید