PDA

View Full Version : نحوه استفاده از شی در فرم دیگر



amir_pro
سه شنبه 07 فروردین 1386, 10:30 صبح
سلام به دوستان و عرض تبریک سال نو
چه طور میشه از داخل form1 مثلا به یه menuitem دسترسی داشت مثلا خاصیت enabled اونا عوض کرد

omid_Ahmadi
سه شنبه 07 فروردین 1386, 10:35 صبح
به هر خاصیتی که نباز داشتی، باید اون رو تعریف و سطح دسترسی اون رو از نوع Public قرار بدی تا بتونی در شیئ دیگه هم به اون دسترسی پیدا کنی.

icmaster
سه شنبه 07 فروردین 1386, 10:36 صبح
در هر فرم برای دسترسی به کنترلهای آن یک collection بنام controls وجود داره که که بوسیله اون میتونی به کنترلهای داخل اون فرم دسترسی داشته باشی مثل:


form2.controls["button1"]

amir_pro
سه شنبه 07 فروردین 1386, 12:46 عصر
ممنون از دوستان
من میخوام از داخل form1 مقدار خاصیت enabled مربوط به کنترل menuitem2 را که در form2 قرار دارد تغییر دهم
اون روشی هم که جناب icmaster عرض کردند نمیشه- چون فرم اصلا این ویژگی را نداره (.net 2003(
ممنون

Amir Oveisi
سه شنبه 07 فروردین 1386, 13:31 عصر
menuitem2 را تو فرم 2 به صورت static و public تعریف کن بعد از هر جایی میتونی با form2.menuitem2 به menuitem2 دسترسی داشته باشی

omid_Ahmadi
سه شنبه 07 فروردین 1386, 14:51 عصر
menuitem2 را تو فرم 2 به صورت static و public تعریف کن بعد از هر جایی میتونی با form2.menuitem2 به menuitem2 دسترسی داشته باشی


تعریف متغیر به صورت Static هیچ ربطی به این سوال نداره و فقط یک اشتباه منطقی ایجاد می کنه.

@amir_pro:
همونطور که icmaster گفت می تونی از خاصیت Controls استفاده کنی، تا جایی که من یاده در 2003 هم وجود داشت، اما الان به IDE اون دسترسی ندارم که تست کنم. علاوه بر اون از روشی هم گفتم می تونی استفاده کنی. واضحه.

Amir Oveisi
سه شنبه 07 فروردین 1386, 15:10 عصر
[QUOTE=omid_Ahmadi;321577]تعریف متغیر به صورت Static هیچ ربطی به این سوال نداره و فقط یک اشتباه منطقی ایجاد می کنه.

چرا ربطی نداره؟ و چرا اشتباه منطقی ایجاد میکنه؟

omid_Ahmadi
سه شنبه 07 فروردین 1386, 15:27 عصر
میشه توضیح بدید که در اون صورت اگر دو نمونه از فرم ایجاد بشه، متغیر استاتیک تعریف شده کدام MenuItem رو نگهداری می کنه؟ برای نمونه اول و یا نمونه دوم؟

Amir Oveisi
سه شنبه 07 فروردین 1386, 23:58 عصر
خوب واسه هر کدوم یکی مجزا

سار
چهارشنبه 08 فروردین 1386, 09:10 صبح
من هم موافقم نیازی به تعریف Static نیست فط کافیه Public بشه اون رو هم میشه از طریق کد درست کرد هم از طریق UI. کافیه تا آبجکتت رو انتخاب کنی و تو پنجره Properties مقدار Modifiers رو برابر با Public کنی که به طور پیش فرض Private است.

omid_Ahmadi
چهارشنبه 08 فروردین 1386, 09:36 صبح
من هم موافقم نیازی به تعریف Static نیست




تعریف متغیر به صورت Static هیچ ربطی به این سوال ندارهو فقط یک اشتباه منطقی ایجاد می کنه.


جالبه!!!!!

Alireza_Salehi
چهارشنبه 08 فروردین 1386, 10:33 صبح
خوب واسه هر کدوم یکی مجزا

به MSDN یه نگاهی بندازید بد نیست !


Use the static modifier to declare a static member, which belongs to the type itself rather than to a specific object.


While an instance of a class contains a separate copy of all instance fields of the class, there is only one copy of each static field.





static (C# Reference) (http://msdn2.microsoft.com/en-us/library/98f28cdx(vs.80).aspx)



Static Classes and Static Class Members (C# Programming Guide) (http://msdn2.microsoft.com/en-us/library/79b3xss3.aspx)


البته با تمام این حرفها شما مختارید هر جوری دلتون می خواد و به هر روشی که ممکنه مشکل رو حل کنید.

پیشنهاد می کنم همون طور دوستان گفتند یا از public استفاده کنید یا یک property برای فرم مورد نظر تعریف کنید که البته دومی بهتره ، البته وقتی اون خاصیت Controls هست (هم در 2003 (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwindowsformsformmemberstopic.asp) و هم در 2005 (http://msdn2.microsoft.com/en-us/library/system.windows.forms.form_members.aspx)) دیگه چرا این همه بحث!

سار
چهارشنبه 08 فروردین 1386, 11:45 صبح
جالبه!!!!!
:خجالت: ولی چرا؟

amir_pro
چهارشنبه 08 فروردین 1386, 11:50 صبح
ممنون از دوستان
همه این کارها را کردم ولی نشد- نمیتونین یه برنامه بزارید که ابن کار را انجام بده- ممنون میشم

omid_Ahmadi
چهارشنبه 08 فروردین 1386, 11:58 صبح
ولی چرا؟


دوست من، متغیر استاتیک هیچ ربطی به این مسئله نداره، اون دوستمون هم که این راه حل رو ارائه داده بود، درک درستی از مفهوم استاتیک نداشت. پس این مورد که نیازی به استفاده از استاتیک نیست هم غلطه. چون استاتیک اصلا کاربرد نداره که نیازی باشه یا نه!



همه این کارها را کردم ولی نشد- نمیتونین یه برنامه بزارید که ابن کار را انجام بده- ممنون میشم


دو راه حل ارائه شده (استفاده از Controls و یا تعریف خاصیت به صورت Public) کاملا واضحه، اگر نمی تونید از این موارد استفاده کنید، فکر کنم بهتره مقداری در مورد ساختار زبان C# مطالعه کنید. فعلا فرصت قرار دادن برنامه سمپل در این مورد برای من وجود نداره.

سار
چهارشنبه 08 فروردین 1386, 12:57 عصر
آهان تازه فهمیدم منظورتون چیه.
بله حق با شماست همان طوری که گفتم، ولی باید یکم ادبیات یاد بگیرم چون جمله رو درست بیان نکردم.
تشکر.

amir_pro
چهارشنبه 08 فروردین 1386, 13:48 عصر
ممنون از دوستان
میرم دنبالش تا بالاخره درستش کنم

Amir Oveisi
چهارشنبه 08 فروردین 1386, 22:03 عصر
من با مفهوم استاتیک مشکلی ندارم دوستان!!
ممنون از توضیحات کافیتون
قبول هم دارم که روش های ارائه شده کامل هستن
ولی من منظورم اینه که با استفاده از متغیر استاتیک هم میشه این مشکل رو حل کرد چون خودم قبلا اینکارو کردم (حالا بماند اصولی بوده یا نه )
بازم ممنون
موفق باشید

linux
پنج شنبه 09 فروردین 1386, 13:19 عصر
بجای این سوال بهتر بود می گفتید که می خواهید چکار کنید؟ برنامه بصورت mdi هست؟

amir_pro
پنج شنبه 09 فروردین 1386, 14:39 عصر
برنامه به صورت mdi نیست
میخوام از داخل فرم1 مقدار خاصیت enabled مربوط به کنترل menuitem1 را false کنم که این منو توی فرم2 است
ممنون

linux
پنج شنبه 09 فروردین 1386, 16:02 عصر
برنامه به صورت mdi نیست
میخوام از داخل فرم1 مقدار خاصیت enabled مربوط به کنترل menuitem1 را false کنم که این منو توی فرم2 است
ممنون
یعنی مثلا یکجورهایی فرم 1 parent فرم 2 هست؟

pa2ab65
پنج شنبه 09 فروردین 1386, 16:38 عصر
سلام
حالا میشه واسه رفع نیاز یه public property تعریف کرد تا بشه اونو دست زد و نیازی به public کردن کل شئ نیست. اینجوری امن تر هم هست. من همیشه اینکارو می کنم.:لبخندساده:

omid_Ahmadi
پنج شنبه 09 فروردین 1386, 18:05 عصر
دوستان این موضوع تا پست شماره سه به دو راه حل رسید که هر دوی اونها قابل اجرا و کاربردی بوده. مابقی پستها بی مفهوم هستن و فقط به علت درک بد موضوع به وسیله بقیه کاربران اضافه شدن.
این دوستمون هم اگر فقط پایه و اصول استفاده از زبان C# رو بلد باشن بعد از پست شماره سه می تونن به سادگی مشکلشون رو حل کنن.
پس خواهش می کنم بحث رو بیهوده ادامه ندید.

موفق باشید.