PDA

View Full Version : مبتدی: خطای Null Reference Exeption Was Unhanled



partovinia
پنج شنبه 11 دی 1393, 17:09 عصر
سلام .من برای اینکه بتونم radiobutton های فرم برنامم رو به صورت چک نخورده در بیارم , یعنی اینکه زمانیکه برنامه اجرا شد radiobutton های روی فرمم انتخاب نشده باشن
این کد رو نوشتم ...






public partial class FrmTest : Form
{
public void uncheckedradiobutton(Control p)
{
foreach (Control ctrl in Parent.Controls)
{
if (object.ReferenceEquals(ctrl.GetType(), typeof(RadioButton)))

{
((RadioButton)ctrl).Checked = false;
}
}
}
}
//
//
private void FrmTest_Load(object sender, EventArgs e)
{
uncheckedradiobutton(groupBox2);
}


ولی این خطا رو میبینم :

null Reference Exception Was unhandled

Object refrence not set to an instance of an object
میشه راهنماییم کنید که ممکنه چه مشکلی داشته باشم؟متشکرم

محمد آشتیانی
جمعه 12 دی 1393, 13:31 عصر
سلام
به اینصورت اصلاح کن


foreach (Control ctrl in p.Controls)



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


public void uncheckedradiobutton(Control p)
{

foreach (Control ctrl in p.Controls)
{
if (ctrl is RadioButton)
{
((RadioButton)ctrl).Checked = false;
}
}
}


موفق باشید

partovinia
جمعه 12 دی 1393, 14:00 عصر
سلام و متشکرم ...
وقتی به همین صورتیکه شما فرمودین نوشتم uncheck نشدن کنترل هام...




foreach (Control ctrl in p.Controls)





و زمانیکه از خاصیت parent استفاده می کنم باز هم همون خطای قبلی رو دارم


foreach (Control ctrl in parent.Controls)






البته می دونم که میتونم همه اونها رو به صورت زیر uncheck کنم ...ولی اگر تعداد کنترلها زیاد باشه زمان زیادی می بره , می شه بگین این خطا معمولا در چه مواقعی رخ میده؟لطفا




RadioButton1.checked=false;

محمد آشتیانی
جمعه 12 دی 1393, 14:15 عصر
دوست من ، اون کد درست کار میکنه
اینم مثال خدمت شما

Rejnev
جمعه 12 دی 1393, 14:19 عصر
هر کنترل والدی داره (Parent). همینطور فرزندانی داره (Controls).
اگه میخوان به رادیو باتن های داخل یک کنترل دسترسی پیدا کنید، باید توی فرزندان اون کنترل حلقه تکرار بزنید.
اگه رادیو ها رو مستقیما توی فرم انداختین کد به این صورت میشه:

foreach(Control c in this.Controls)//"this" is current class which is the form.
{
//... do something...
}

و اگه رادیوها مثلا توی یک پنل قرار دارند:

foreach(Control c in this.myPanel.Controls)
{
//... do something...
}

partovinia
شنبه 13 دی 1393, 12:57 عصر
سلام و ممنونم.
من این کد رو روی رویداد لود فرم نوشتم و متاسفانه روی لود غرم اجرا نمی شه ,ولی روی کلیک دکمه اجرا میشه ! میشه راهنماییم کنید که چه طور میتونم در زمانی که فرم لود شد اونها رو چک نخورده ببینم؟ سپاسگزارم