PDA

View Full Version : اعمال تغییر در فرم پدر



ji ming u
دوشنبه 08 اسفند 1390, 21:45 عصر
دوستان یه فرم دارم به عنوان فرم پدر و یه فرم به عنوان فرزند
فرم فرزند داخل فرم پدرفراخوانی میشه
ولی نمیشه از داخل فرم فرزند بر روی فرم پدر تغییرات را اعمال کرد

majidrezaei2007
دوشنبه 08 اسفند 1390, 22:05 عصر
دو راه وجود داره . ساخت یک event و یا استفاده از اشاره گر که من دومی رو پیشنهاد می کنم چون هم سرعت بیشتری داره و هم آسون تر

یک اشاره گر از نوع فرم پدر درون فرم فرزند تعریف کن . به این شکل :

public ParentForm parent_pointer;

البته اگه فقط یک فرم پدر داری میتونی این اشاره گر رو به صورت static تعریف کنی که حافظه کمتری مصرف بشه
سپس موقعی که فرم فرزند رو می سازی ، قبل از اینکه نمایشش بدی اشاره گری که درونش تعریف کردی رو مقدار میدی . به این شکل :

ChildForm frm = new ChildForm();
frm.parent_pointer=this;
frm.ShowDialog();

حالا تو فرم فرزند . هرجاش که خاستی با همون parent_pointer به فرم پدر دسترسی داری . انگاری که دقیقا همون رو تو فرم فرزند داری .
اگر فرم پدر هم فرم نیست یا خود اون فرم فرزند دیگه ای هست . به جای this باید instance خود همون فرم پدری که در نظر داری رو بدی .

vof.ir
دوشنبه 08 اسفند 1390, 23:57 عصر
دوست عزیز، هنگامی که دارید فرم فرزند را نمونه گیری میکنید و نمایش می دهید
باید در سازنده آن، خود فرم پدر را به وسیله کلمه کلیدی
this
ارسال کنید،
یعنی سازنده فرم فرزند شما باید یک پارامتر از نوع فرم پدر داشته باشد

shadi khanum
سه شنبه 09 اسفند 1390, 09:55 صبح
دوست عزیز این تاپیک خیلی تکراریه و دوستان قل از شما این سوال رو پرسید و بارها در موردش صحبت شده و راه های زیادی گفته شده.. بهتر بود اول یه سرچ میزدی..
به هر حال یکی از راه ها اینه که وقتی که میخوای فرم فرزند رو show کنی، parentاون رو بذاری This و بعد تو فرم فرزند با این دستور میتونی به فرم مادر دست پیدا کنی و مثلا تابعی چیزی رو توش فراخوانی کنی..
((parentForm)this.Parent).FuncName();

majidrezaei2007
سه شنبه 09 اسفند 1390, 15:11 عصر
دوست عزیز، هنگامی که دارید فرم فرزند را نمونه گیری میکنید و نمایش می دهید
باید در سازنده آن، خود فرم پدر را به وسیله کلمه کلیدی
this
ارسال کنید،
یعنی سازنده فرم فرزند شما باید یک پارامتر از نوع فرم پدر داشته باشد


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

mrbm_2007
سه شنبه 09 اسفند 1390, 17:37 عصر
سپس موقعی که فرم فرزند رو می سازی ، قبل از اینکه نمایشش بدی اشاره گری که درونش تعریف کردی رو مقدار میدی . به این شکل :

ChildForm frm = new ChildForm();
frm.parent_pointer=this;
frm.ShowDialog();




این رو میتونی اینجوری هم خلاصه کنی


(new ChildForm(){parent_pointer=this}).ShowDialog();



و مجبور نیستی تعریف سازنده ی فرم فرزند رو تغییر بدی:تشویق:

vof.ir
چهارشنبه 10 اسفند 1390, 01:31 صبح
روشی که shadi khanum گفتند میشه
اما زمانی که بخواهیم به مقادیری که توی فرم پدر هست دسترسی داشته باشیم فکر نکنم که به کار بیاد،
این یک نکته،

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

shadi khanum
چهارشنبه 10 اسفند 1390, 07:55 صبح
روشی که shadi khanum گفتند میشه
اما زمانی که بخواهیم به مقادیری که توی فرم پدر هست دسترسی داشته باشیم فکر نکنم که به کار بیاد،
این یک نکته،

بعد برای رعایت نکته فوق، باید از روش ارسال پارامتری که گفتم استفاده کنید
دوست عزیز با این راه شما میتونی به هر مقدار یا پراپرتی یا تابعی که توی کلاس پدر باشه و modifier اون public باشه دسترسی داشته باشید
موفق باشید

mrbm_2007
چهارشنبه 10 اسفند 1390, 11:52 صبح
modifier اون public باشه دسترسی داشته باشید


ولی بهتره modifier اون رو Internal بذارید بجای Public

vof.ir
چهارشنبه 10 اسفند 1390, 12:45 عصر
خب، با این روشی که شادی خانم گفتند، فکر نکنم که مقادیری که در هنگام اینیشیالایز شدن فرم ، مشخص شدند، دسترسی داشت
درسته>؟
اما روشی که بنده گفتم، به مقادیر کنونی فرم پدر میتوان دسترسی داشت.
درسته؟
یا دارم اشتباه میگم
؟

mrbm_2007
چهارشنبه 10 اسفند 1390, 13:06 عصر
نه عزیزم فرقی نداره
به همه ی مقادیر کنونی فرم پدر (با شرط modifier) دسترسی داری
در واقع آبجکت فرم رو داری، این دوتا روش فرق خاصی ندارن، شما میگید یه نمونه از فرم پدر در فرم فرزند باشه، شادی خانوم هم همین رو میگه فقط این نمونه رو بذار توی Parent و هنگام استفاده کستش کن به فرم پدر

vof.ir
چهارشنبه 10 اسفند 1390, 13:13 عصر
ok, got it
thx