PDA

View Full Version : سوال: set کردن value برای Radiobutton



daneshjo IT
سه شنبه 12 آبان 1388, 23:51 عصر
باسلام،

چه طور می توان برای radiobutton هایی که در فرم استفاده کردیم مقدار value مشخص (مثلا یک مقدار integer مانند 3 یا ... )تعریف کنیم و در نهایت value های radiobutton هایی که check خورده اند را در یک فایل Dat ذخیره کرد؟

daneshjo IT
چهارشنبه 13 آبان 1388, 12:01 عصر
برای set کردن مقدار برای radiobutton هنوز راه حلی پیدا نکردم.
علت اشکال کد زیر برای ذخیره اطلاعات در چیست؟
error که در اجرا به من میدهد این است : "Object reference not set to an instance of an object"




private void pictureBox2_Click(object sender, EventArgs e)
{
string fname1 = Application.StartupPath + "\\C.dat";
System.IO.StreamWriter objWriter1;
objWriter1 = new System.IO.StreamWriter(fname1);
RadioButton senderControl =(sender as RadioButton);

if (senderControl.Checked)
{
objWriter1.WriteLine(senderControl.Text);
}
objWriter1.Close();
}

Reza_Yarahmadi
چهارشنبه 13 آبان 1388, 14:51 عصر
چه طور می توان برای radiobutton هایی که در فرم استفاده کردیم مقدار value مشخص (مثلا یک مقدار integer مانند 3 یا ... )تعریف کنیم و در نهایت value های radiobutton هایی که check خورده اند را در یک فایل Dat ذخیره کرد؟
RadioButtonهای VS خاصیتی به نام value ندارن که بتونید اونو Set کنید. ولی میتونید از خاصیت Tag واسه تعیین Value استفاده کنید

if (radioButton1.Checked)
objWriter1.WriteLine(((RadioButton)sender).Tag.ToS tring());

علت اشکال کد زیر برای ذخیره اطلاعات در چیست؟
کد شما رو روی RadioButton تست کردم و مشکلی نداشت. احتمالا مشکل از رویدادیه که کد رو توش نوشتید. شما توی رویداد کلیک PictureBox این کد رو نوشتید

RadioButton senderControl =(sender as RadioButton);
اگر این رویداد برای PictureBox تعریف شده باشه و روی اون کلیک کنید مقدار senderControl در دستور بالا برابر null میشه (دلیلش هم کاملا واضحه!) و وقتی توی شرط if ازش استفاده میکنید باعث بروز خطا میشه.

daneshjo IT
چهارشنبه 13 آبان 1388, 19:42 عصر
از راهنمایی شما متشکرم، فقط اینکه من 3 تا panel در فرم قرار دادم و در هر panel چندین radiobutton قرار دادم ، برای چک کردن button هایی که چک خورده اند و ذخیره مقدار آن ها از کد زیر استفاده کردم ،
آیا می توان کد زیر را بهتر کرد؟! (یعنی به جای استفاده از 6 یا 7 تا if ، یک روش دیگری استفاده کرد؟)




if (radioButton1.Checked)
objWriter1.WriteLine(radioButton1.Tag.ToString());

if (radioButton3.Checked)
objWriter1.WriteLine(radioButton3.Tag.ToString());

objWriter1.WriteLine(textBox3.Text);

if (radioButton2.Checked)
objWriter1.WriteLine(radioButton2.Tag.ToString());

if (radioButton4.Checked)
objWriter1.WriteLine(radioButton4.Tag.ToString());

if (radioButton5.Checked)
objWriter1.WriteLine(radioButton5.Tag.ToString());

Reza_Yarahmadi
چهارشنبه 13 آبان 1388, 20:44 عصر
برای ذخیره همه RadioButtonهای فرم و برای همه پنلها میشه از کد زیر استفاده کرد
foreach (Control Ctrl in Controls)
{
if (Ctrl is Panel)
foreach (Control ctrl in Ctrl.Controls)
{
if ((ctrl is RadioButton) && (((RadioButton)ctrl).Checked))
objWriter1.WriteLine(ctrl.Tag.ToString());
}
}

daneshjo IT
چهارشنبه 13 آبان 1388, 22:44 عصر
این کد اصلا جواب نداد، یعنی پس از اجرا چیزی در فایل ذخیره نمیشود؟

Reza_Yarahmadi
پنج شنبه 14 آبان 1388, 19:26 عصر
این کد اصلا جواب نداد، یعنی پس از اجرا چیزی در فایل ذخیره نمیشود؟
دوست عزیز کد مشکلی نداره احتمالا شما خاصیت Tag برای RadioButtonها رو مقدار دهی نکردید!! اول برای هر RadioButton خاصیت Tag رو مقدار دهی کنید (از طریق پنجره Properties) بعد دستور رو امتحان کنید ببینید میشه یا نه! :چشمک: