PDA

View Full Version : سوال: چطور میشه فهمید کدوم RadioButton تیک خورده؟



Reza_Yarahmadi
یک شنبه 30 فروردین 1388, 17:18 عصر
سلام
یه سؤال ساده داشتم! (البته برای شما اساتید)
من توی برنامه ام 2 تا پنل دارم که زمان لود برنامه بسته به اطلاعاتی که از سیستم میگیره چندتا رادیو باتن به هر کدوم اضافه میشه. مشکل من اینجاست که نمی تونم تشخیص بدم کدوم رادیو باتن از هر پنل تیک خورده!:ناراحت:
اگه کمک کنید ممنون میشم.

salih2000
یک شنبه 30 فروردین 1388, 18:07 عصر
moshkele man ham hast!
age fahmidi vase manam befrest bi zahmat
s.ali.hoseyni@gmail.com

hsmfaridmehr
یک شنبه 30 فروردین 1388, 19:03 عصر
if (radioButton1.Checked)
{
//Do ever you want
}

احمد سامعی
یک شنبه 30 فروردین 1388, 22:50 عصر
ساده ترين راه استفاده از حلقه هاست به صورت زير اما راه هاي ديگه هم داره كه چون من برنامه شما رو نمي دونم چه طوري طراحي شده و كي مي خواهيد بفهميد كدوم راديوباتن چك شده نمي تونم كمك كنم مثلاً از رويدادها و پارامتر(e) اونها هم مي تونيد استفاده كنيد


byte i = 0;
for (; i < panel1.Controls.Count; i++)
{
RadioButton r = (RadioButton)(panel1.Controls[i]);
if (r.Checked) { break; }
}
در اينجا ( i ) شماره راديوباتن هست كه تيك خورده.(نكته i خارج از حلقه تعريف شده تا بيرون حلقه هم قابل دسترس باشه، اگر شماره يكي بيشتر بود i بايد داخل حلقه افزايش بدي نه تو خط for)


جناب salih2000 لطفاً قوانين رعايت كنيد و از فينگيش نوشتن خودداري كنيد. براي پاسخ گرفتن هم بايد به خودتون زحمت بديد برگشته پست نگاه كنيد براي موارد خواص ايميل مي زنن

Reza_Yarahmadi
دوشنبه 31 فروردین 1388, 00:28 صبح
if (radioButton1.Checked)
{
//Do ever you want
}


دوست عزیز، دیگه در این حد هم که شما فکر میکنید بی سواد نیستیم!!!

با تشکر از آقای سامعی باید عرض کنم کد ایشون فقط در حالتی جواب میده که تمام کنترلهای پنل رادیو باتن باشه. به کمک کد ایشون و یه مقدار کوچیک تغییر (جسارتا) مشکلم حل شد :چشمک:



for (int i = 0; i < panel1.Controls.Count; i++)
{
if (panel1.Controls[i] is RadioButton)
{
RadioButton r = (RadioButton)(panel1.Controls[i]);
if (r.Checked)
MessageBox.Show(r.Text);
}
}

بازم از آقای سامعی تشکر میکنم

mostafaaa
دوشنبه 31 فروردین 1388, 09:34 صبح
سلام دوست من
استفاده از حلقه درسته که میتونه مشکلتون رو حل کنه ولی منطقی ترین راه نیست. هر زمانی که یه رادیوباتن تیک میخوره یه ایونت به نام CheckedChanged اجرا میشه شما به راحتی میتونید بوسیله نسبت دادن یه Handler به صورت RunTime به این ایونت مشکلتون رو حل کنید و بفهمید که کدوم رادیوباتن تیک خورده، فقط کافیه در زمان ساختن رادیوباتن ها Handler مربوطه رو بهش اضافه کنید. یه چیزی تو این مایه ها :

RadioButton RD = new RadioButton();
RD.Name = "RadioButton1";
RD.CheckedChanged += RD_CheckedChanged;
this.Controls.Add(RD);
و خود Handler

private void RD_CheckedChanged(object sender, EventArgs e)
{
RadioButton RD = (RadioButton)sender;
if (RD.Checked)
MessageBox.Show(RD.Name + " checked");
}
یا علی

احمد سامعی
دوشنبه 31 فروردین 1388, 12:26 عصر
با تشكر از راهنمايي استاد Mostafaaa همونطور كه اشاره شد، ساده ترين راه استفاده از حلقه هاست مي تونيد event هم استفاده كنيد و براي عدم ايجاد شئ جديد از اين كد هم به جاي متد Handler جناب Mostafaaa استفاده كنيد و مستقيم به خود راديوباتن دسترسي داشته باشيد:

Handler:

private void RD_CheckedChanged(object sender, EventArgs e)
{
if ((sender as RadioButton).Checked)
{ MessageBox.Show((sender as RadioButton).Name + " Checked"); }
}

esmaeily-hosein
دوشنبه 31 فروردین 1388, 12:46 عصر
کد بالا به صورت Inline Method

RadioButton RD = new RadioButton();
RD.Name = "RadioButton1";
RD.CheckedChanged += delegate(object sender,EventArgs e)
{
RadioButton radioButton=(RadioButton)sender;
if(radioButton.Checked) MessageBox.Show(radioButton.Text);
}
}
this.Controls.Add(RD);

Reza_Yarahmadi
دوشنبه 31 فروردین 1388, 21:55 عصر
از همه دوستانی که لطف کردند و بهم کمک کردن ممنونم
انشاا... بتونم جبران کنم!!!! :گیج: