PDA

View Full Version : مشکل نال شدن شیئ Image در هنگام اجرا



hamidreza.m
دوشنبه 31 مرداد 1390, 18:07 عصر
یه برنامه نوشته ام که توی اون یه تابع از نوع void تعریف کردم که کارش اینه که خاصیت Visibility چند Image را برابر Visibility.Hidden قرار میده ولی وقتی برنامه را اجرا میکنم میگه که شیئ شما null است و شما نمیتوانید خاصیت آن را عوض کنید . راستش خطاش اینه :

Object reference not set to an instance of an object :افسرده:

و من تو یه تاپیک در مورد این خطا سوال کرده بودم گفته بودند که به خاطر null شدن شیئ image تان هست.

مخواستم ببینم چرا image ناگهانی در هنگام اجرا null میشه ؟

تو رو به خدا کمک کنید خیلی مهمه . واقعا ممنونتون میشم کمک کنید .
:قلب:

cardano7
سه شنبه 01 شهریور 1390, 09:14 صبح
وای خدا
مشکلات این جوری خود من رو همیشه عذاب میده
معمولا اشکال هم از خود برنامه نویس هست. جایی که اصلا فکرش رو نمی کنی یک اشتباه کردی.
کدت را این جا بگذاری می تونم برات trace ش بکنم.

hamidreza.m
جمعه 04 شهریور 1390, 10:56 صبح
ممنون از این که کمکم میکنید پروژه را میذارم ممنون میشم trace کنید.

سورس پروژه (http://www.mediafire.com/?8bych8gobbfb58g)

bahar-danaei
شنبه 05 شهریور 1390, 10:56 صبح
سلام
منم می خوام که با تیک زدن و برداشتن تیک چک باکس ها ، اجزای روی صفحه را hide یا visible کنم.
برای بعضی از چک باکس ها درست کار می کنه ولی برای بقیه شون نه.در واقع همون error با لا را می ده. در حالی که چک باکس ها همه مثل همند !!!

cardano7
دوشنبه 07 شهریور 1390, 19:47 عصر
عذر می خواهم اگر دیر جواب می دهم.
مشکل برنامه این هست که:
در برنامه های دات نتی ما دو مرحله برای هر فرم داریم. اولین مرحله همان سازنده ی فرم هست که مقداردهی های اولیه در اون انجام میشه ولی فرم هنوز از برخی جهات آماده نیست. در مرحله ی دوم فرم Load میشه و آماده ی استفاده میشه.
در برنامه ی شما در بخش سازنده ی کلاس هنوز Image ها مقدار دهی نشده و برابر Null هستند. پس نمی تونید خواص اونا رو تغییر بدهید. اما خطای برنامه در این بخش روی می دهد:

private void img1clear()
{

g1i1.Visibility = Visibility.Hidden;//Error Here
g1i2.Visibility = Visibility.Hidden;//Error Here
g1i3.Visibility = Visibility.Hidden;//Error Here
g1i4.Visibility = Visibility.Hidden;//Error Here
g1i5.Visibility = Visibility.Hidden;//Error Here
....


علت این هست که هنوز عکس ها مقدار دهی نشده اند. اما این متد چطور صدا زده میشه؟ توسط :


private void g1_TextChanged(object sender, TextChangedEventArgs e)
{
if (Convert.ToInt32(g1.Text) == 1)
{
img1clear();//Call Method from here


حالا چرا g1_TextChanged صدا زده میشه؟ چون شما در این خط مقدار g1 را تغییر می دهید:
<TextBox Height="23" Name="g1" Text="1" Width="120" Visibility="Visible" TextChanged="g1_TextChanged" />

راه حل:
شما مقدار g1 را در بخش xaml تغییر ندهید چون این کار مستلزم این هست که Image ها Load شده باشند.
پس، در خط فوق "Text="1 را حذف کنید:
<TextBox Height="23" Name="g1" Width="120" Visibility="Visible" TextChanged="g1_TextChanged" />
و به جای اون در بخش Load یعنی در متد Window_Loaded خط زیر را اضافه کنید:
g1.Text = "1";

از این تابع به بعد مقادیر Image ها load شده اند و دیگر مشکلی نیست.

امیدوارم که بی ابهام حرف زده باشم و مشکل شما هم حل بشود.
موفق باشید.

hamidreza.m
چهارشنبه 09 شهریور 1390, 17:40 عصر
واقعا ممنون از کمکتون خیلی ممنون :بوس::لبخند:

من این کار را کردم و مشکلم حل شد. ولی یه سوالی در مورو مفهموم این قضیه دارم ببینید علت مشکل را درست میگم یا نه :

من مقدار g1 را در مرحله ی اول برنامه ( مقدار دهی های اولیه ) مقدار دهی کرده ام image ها در مرحله ی دوم یعنی load شدن فرم مقدار دهی میشوند .

g1_TextChanged قبل از این که image ها مقدار دهی شوند صدا زده میشود ( چون قبلا g1 مقدار دهی شده ) و در هنگام صدا زدن آن مقدار image ها null است و به همین

دلیل برنامه خطا می دهد ولی وقتی g1 را هنگام load شدن فرم مقدار دهی میکنم g1_TextChanged قبل از مقدار دهی image ها صدا زده نمیشود ( چون g1 هنوز مقدار

دهی نشده ) به همین دلیل وقتی صدا زده میشود که image ها مقدار دارند و برنامه خطا نمیدهد .

حالا چرا image ها در زمان load شدن مقدار دهی میشوند در صورتیکه source آن ها را در XAML مقدار داده ام ؟

cardano7
جمعه 11 شهریور 1390, 07:29 صبح
دقیقا درست می گویید.

حالا چرا image ها در زمان load شدن مقدار دهی میشوندنه الزاما. شما در xaml اول تکست ها رو مقدار دهی کرده اید و بعد عکس ها را. پس تضمینی نیست که عکس ها قبل از تکست ها مقدار دهی شوند.
اما زمانی که Load اجرا می شود دیگر مطمئن هستید که عکس ها مقدار داده شده اند.

این صرفا نظر منه. خودم هم رشته ام کامپیوتر نیست و گر نه بیشتر وقت داشتم بشینم WPF بخونم. فلسفه ی دقیقش رو یاد بگیرم.

پ.ن: در ضمن موفع نوشتن برنامه حساب این رو هم بکنید که ممکنه سایز مانیتور طرف کوچک باشه و فرم شما در صفحه ی مانیتور جا نشه.

hamidreza.m
جمعه 11 شهریور 1390, 15:23 عصر
ممنون
درمورد سایز هم چون برنامه را میخواهیم در active board و با استفاده از مانیتور 21 اینچ اجرا کنیم طرف خواسته که توی اونجا تمام صفحه باشه . و full HD برا همین مجبور شدم اندازه را اینجوری بگیرم .
باز هم ممنون از بابت کمکتون:بوس: