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

1396/7/19 محمد احمدی 11366

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

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

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

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

ابتدا یک لیست باکس , یک تکست باکس و یک کامند به فرم اضافه کنید !! ( سعی کنید رنگ فرم رو عوض کنید و کنترل هایی که اضافه کردین رو یک مقدار مرتب کنید و بهشون نظم بدین . همین چند تا کار کوچیک میتونه ضاهر برنامه رو از 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 رو برابر اندیس اون آیتم مورد نظر قرار بدیم !

سی شارپ

عکس 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();

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

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

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

کانال تلگرام