PDA

View Full Version : حرفه ای: راه حل خطای کد زیر چیه؟ دسترسی به اشیا از طریق فرم دیگر!



hahaie
چهارشنبه 10 فروردین 1390, 00:33 صبح
سلام.من میخوام به ابزار تایمر که در فرم دیگه است با کد زیر دسترسی داشته باشم.اما خطا میده.کسی راه حلشا میدونه؟ممنون

(Application.OpenForms["main"].Controls["timer1"]asTimer ).Enabled = false;

ehsanara
چهارشنبه 10 فروردین 1390, 00:56 صبح
تو فرم main این تابع رو بنویس

public void EnableT()
{
timer1.Enabled = false;
}


و تو فرمی که میخوای Timer فرم main رو Enable = false کنی این رو جای کدی که بالا نوشتی کن

main Mf = (main)Application.OpenForms["main"];
Mf.EnableT();

quantomquery
چهارشنبه 10 فروردین 1390, 04:05 صبح
سلام.من میخوام به ابزار تایمر که در فرم دیگه است با کد زیر دسترسی داشته باشم.اما خطا میده.کسی راه حلشا میدونه؟ممنون

(Application.OpenForms["main"].Controls["timer1"]asTimer ).Enabled = false;



فقط کافیه بری تو پروپرتیس تایمر قسسمت modifiers رو از private به internal تغییر بدی
کدت کار می کنه

موفق باشی

shadi khanum
چهارشنبه 10 فروردین 1390, 08:35 صبح
چه Errori میده؟ اگه مشکلت حل نشده،متن Error رو بذار

Amir Oveisi
چهارشنبه 10 فروردین 1390, 11:56 صبح
فقط کافیه بری تو پروپرتیس تایمر قسسمت modifiers رو از private به internal تغییر بدی
کدت کار می کنه

موفق باشی

توضیح بدید به چه دلیلی باید این کار رو انجام بدن؟
از پاسختون دفاع کنید

Amir Oveisi
چهارشنبه 10 فروردین 1390, 11:58 صبح
سلام.من میخوام به ابزار تایمر که در فرم دیگه است با کد زیر دسترسی داشته باشم.اما خطا میده.کسی راه حلشا میدونه؟ممنون

(Application.OpenForms["main"].Controls["timer1"]asTimer ).Enabled = false;

1- کد هایی که قرار میدید رو داخل تگ #C بگذارید نه تگ html
2- بدون اشاره به خطایی که رخ داده انتظار دارید بقیه پیشگویی کنند که چه خطایی اتفاق افتاده؟

exlord
چهارشنبه 10 فروردین 1390, 12:46 عصر
1- کد هایی که قرار میدید رو داخل تگ #C بگذارید نه تگ html
2- بدون اشاره به خطایی که رخ داده انتظار دارید بقیه پیشگویی کنند که چه خطایی اتفاق افتاده؟

مدیر محترم ... ایشون مبتدی هستن ولی شما که مدیر بخش هستین باید به محض نگاه کردن به این کد بفهمین که Timer یه کنترل نیست که توی Controls باشه .... Timer یه component هست ...
و مدل صحیح استفاده از کد بالا به این شکله ...
(Application.OpenForms[typeof(Form3).Name] as Form3)
و دوست عزیز تنها راه درست و منطقی و OOP برای دسترسی به کنترل ها و آبجکتها و هر کوفت و زهرماری که توی یه Class است استفاده از Property هستش ...

Directx
چهارشنبه 10 فروردین 1390, 12:58 عصر
بابا هر دو روز راجع به این دسترسی به فرم دیگه تاپیک میزنند پس مدیرا چکار می کنند دوستان قصد بی احترامی ندارم ولی قبلش یه سرچ بزنید من :متعجب: هستم و نمیدونم چرا تا الان این تاپیک حذف نشده

Amir Oveisi
چهارشنبه 10 فروردین 1390, 13:05 عصر
ولی شما که مدیر بخش هستین باید به محض نگاه کردن به این کد بفهمین که Timer یه کنترل نیست که توی Controls باشه .... Timer یه component هست ...

کاربر گرامی، دلیلی نمی بینم که بر اساس پیش بینی های خودم به سوالی جواب بدم. تجربه فعالیت چندین ساله در این سایت اینو ثابت کرده که این کار، نه تنها باعث تسریع در حل مشکلی نمیشه بلکه اوضاع رو بدتر می کنه :)
در ضمن شما از کجا میدونین که ایشون از timer موجود در System.Windows.Forms استفاده کردن؟ شاید یک third-party component هست و داخل کنترل های فرم اضافه میشه...
بله بنده مدیر هستم و این دلیل نمیشه که با حدسیاتم دیگران رو گیج کنم، بنابراین سعی می کنم با در نظر گرفتن همه جوانب و احتمالات و پس از مطمئن شدن از اینکه سوال چی هست، به اون پاسخ میدم.
شما هم همیشه قبل از پاسخ دادن به سوالات فکر کرده و با در نظر گرفتن همه جوانب، بهترین پاسخ رو بدید. :)

موفق باشید

Amir Oveisi
چهارشنبه 10 فروردین 1390, 13:21 عصر
بابا هر دو روز راجع به این دسترسی به فرم دیگه تاپیک میزنند پس مدیرا چکار می کنند دوستان قصد بی احترامی ندارم ولی قبلش یه سرچ بزنید من :متعجب: هستم و نمیدونم چرا تا الان این تاپیک حذف نشده

این تاپیک به دلیل بروز خطا در حین این کار ایجاد شده و به همین دلیل پاک نشده دوست گرامی :)

javad_r_85
چهارشنبه 10 فروردین 1390, 15:53 عصر
یک متد در اون فرمت ایجاد کن که تغیرات را روی تایمر انجام دهد و در فرم دیگر این متد را اینطور صدا کن



foreach (Form frm in Application.OpenForms)
{
if (frm is frm_Member)
{
frm_Member f = (frm_Member)frm;

f.timer1.Enable=false;
}
}



بهتره همونطور که گفتم یه متد بنویسی و اونا صدا بزنی

quantomquery
چهارشنبه 10 فروردین 1390, 20:18 عصر
توضیح بدید به چه دلیلی باید این کار رو انجام بدن؟
از پاسختون دفاع کنید

سلام
وقتی که از یه فرم بخوان به کنترلی تو فرم دیگه دسترسی داشته باشین باید این کار رو بکنید از معنیش معلومه یعنی کنترل کننده این ایتم میتونه از یه شی خارجی مثلا یه فرم دیگه باشه
بعد از اون با یه foreach تو تمام application.openforms می گردیم و فرمی که همنام همون فرم مورد نظر هست رو پیدا می کنیم و ....

مثال :
اول مدیفایر رو اینترنال می کنیم
بعد تو فرم دوم ..... (فرم اول که تایمر توش هست frmMain است)


ویرایش شده توسط Amir Oveisi (http://barnamenevis.org/member.php?17736-Amir-Oveisi)
کدتون رو درون تگ #C قرار بدید. به دلیل ناخوانا بودن حذف شد.

Amir Oveisi
چهارشنبه 10 فروردین 1390, 22:38 عصر
چرا باید اینترنال بکنیم؟
لطفا توضیح بیشتری بدبد در مورد دلیلش :)

navidkhalilian
پنج شنبه 11 فروردین 1390, 02:01 صبح
سلام دوستان.اول از همه بگم نه قصد توهین دارم نه راهنمایی فقط می خوام بگم به جای سوال پرسیدن بهتره به سوال فردی که تاپیک رو راه انداخته جواب بدید بنده خدا کارش راه بیفته.اگر کسی سوالی داره بهتره اول جستجو کنه بعد اگر به نتیجه نرسید خودش تاپیک بزنه که مسیر این تاپیک از موضوعش جدا نشه.

خدمت Amir Oveisi بگم که internal هم شبیه public هست با این تفاوت که اگر Modifier برابر public باشه از تمام برنامه ها(Assembly IL) ها به کد(Member) شما دسترسی هست اما در حالت internal فقط از داخل خود برنامه دسترسی هست.پس بهتره ما internal را انتخاب کنیم که امنیت برنامه بهتر باشه.دلیل پایین بودن امنیت thread ها در حالت عادی همینه public بودن آنهاست یعنی چون thread ها را اکثرا در حالت عادی تعریف می کنند راهت میشه از کار انداختشون(همون کاری که کرکر ها انجام میدم).
امید وارم موفق باشید

در جواب دوست عزیزمون هم باید بگم که اگر تعداد کنترل های داخل فرم زیاد نیست راه حل پست شماره 11 (http://barnamenevis.org/showthread.php?280453-%D8%B1%D8%A7%D9%87-%D8%AD%D9%84-%D8%AE%D8%B7%D8%A7%DB%8C-%DA%A9%D8%AF-%D8%B2%DB%8C%D8%B1-%DA%86%DB%8C%D9%87%D8%9F-%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C-%D8%A8%D9%87-%D8%A7%D8%B4%DB%8C%D8%A7-%D8%A7%D8%B2-%D8%B7%D8%B1%DB%8C%D9%82-%D9%81%D8%B1%D9%85-%D8%AF%DB%8C%DA%AF%D8%B1!&p=1237687&viewfull=1#post1237687) خوبه.