PDA

View Full Version : سوال: از فرم فعال چطوري تايمر فرم ديگر را stop كنم



csharpprogramer88
چهارشنبه 20 مرداد 1389, 23:09 عصر
سلام
من دو فرم دارم و در فرم دوم تايمر بكار بردم حالا چطوري ميتونم از فرم اول به تايمر فرم دوم دسترسي داشته باشم و تايمر فرم دوم را stop كنم

mahdi87_gh
چهارشنبه 20 مرداد 1389, 23:16 عصر
سلام دوست عزیز

((Application.OpenForms["Form2"] as Form2).Controls["timer1"] as Timer).Enabled = false;
با فرض اینکه تایمر درون فرم 2 قرارداره

csharpprogramer88
چهارشنبه 20 مرداد 1389, 23:26 عصر
برادر ارور زير را ميده خواهشا بررسي كنيد
براي سه فرم هست :


((Application.OpenForms["frmdate"] as frmdate).Controls["timer1"] as Timer).Enabled = false;
((Application.OpenForms["frmpic"] as frmpic).Controls["timer1"] as Timer).Enabled = false;
((Application.OpenForms["frmsaat"] as frmsaat).Controls["timer1"] as Timer).Enabled = false;

sadra_r2235
پنج شنبه 21 مرداد 1389, 00:00 صبح
سلام دوست عزیز .
اول یه تایمر رو فرم دوم میزاری.
بعد خصوصیت Modifires تایمر رو برابر Public قرار بده.
حالا میتونی از هر فرمی به تایمر فرم دوم دسترسی پیدا کنی.
مثلا :

private void button1_Click(object sender, EventArgs e)
{
Form2 fr = new Form2();
fr.timer1.Enabled = false;
}

موفق باشی.

mahdi87_gh
پنج شنبه 21 مرداد 1389, 00:06 صبح
بله حق با شماست. این روش در مورد تایمر جواب نمیده!! اما شما میتونید توی فرمتون یک تابع پابلیک تعریف کنید و در فرم 2 اون تابع رو با همون روشی که گفته ام اجرا کنید. مثلا: در فرم 1: public void enableit() { this.timer1.Enabled = false; } و در فرم 2: (Application.OpenForms["Form1"] as Form1).enableit();

میلاد قاضی پور
پنج شنبه 21 مرداد 1389, 00:56 صبح
خب از خاصیت enabled استفاده کنید . اگر منظورتون اینه که به تایمر فرم دوم دسترسی ندارید دو تا راه دارید . کدنویسی اصولی یا همون دور سر چرخوندن لقمه کدنویسی غیر اصولی . اصولیش اینه که از خاصیت مودیفایر تایمر استفاده نکنید . غیر اصولیش اینه که مودیفایر تایمر رو پابلیک کنید و در فرم اول تایمر رو با استفاده از خاصیت اینیبلد غیر فعال کنید . اما اصولیش چیه ؟ اینه که در هر تیک تایمر ، خاصیت اینیبلد تایمر برابر یک متغیر بول باشه که یا ترو هست یا فالس. و شما وظیفتون اینه که در فرم اولتون اون متغیر رو ترو یا فالس کنید .

vandermond
پنج شنبه 21 مرداد 1389, 01:03 صبح
خب از خاصیت enabled استفاده کنید . اگر منظورتون اینه که به تایمر فرم دوم دسترسی ندارید دو تا راه دارید . کدنویسی اصولی یا همون دور سر چرخوندن لقمه کدنویسی غیر اصولی . اصولیش اینه که از خاصیت مودیفایر تایمر استفاده نکنید . غیر اصولیش اینه که مودیفایر تایمر رو پابلیک کنید و در فرم اول تایمر رو با استفاده از خاصیت اینیبلد غیر فعال کنید . اما اصولیش چیه ؟ اینه که در هر تیک تایمر ، خاصیت اینیبلد تایمر برابر یک متغیر بول باشه که یا ترو هست یا فالس. و شما وظیفتون اینه که در فرم اولتون اون متغیر رو ترو یا فالس کنید .
توضيحات شما درسته فقط يه نكته اينكه «براي دسترسي به اون متقير بول هم بايد يك خاصيت ايجاد كنيد و با اون كار كنيد.»

میلاد قاضی پور
پنج شنبه 21 مرداد 1389, 04:34 صبح
پاسخ پیام خصوصی:
ببین عزیزم توی فرم دوم یه تایمر میذاری .یه متغیر پابلیک هم بالای قبل از سازنده کلاس فرم دومت تعریف میکنی از نوع بول که مقدار اولیه اش ترو هست . خب میری توی تایمرت (timer_tick) مینویسی که :



if( timer1.enabled==true)
timer1.enabled=myboolVar;

//myboolvar hamoon moteghayer booli hast.




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

در قسمت بالای سازنده فرم دوم :




bool timerEnable=true;
public bool TimerEnable
{
get{return timerEnable;}
set{timerEnable=value;}
}

و درون تایمر تیک :



private void timer1_tick()
{
timer1.enabled=timerEnable;
}

در فرم اول درون هر کنترلی که خواستید بنویسید:



f2.TimerEnable=false;

فکر کنم این قاعده که باید حتما از پراپرتی ها برای اعمال مقادیر دلخواه برای متغیرهای کلاسهای مختلف استفاده کنیم مربوط به قاعده کپسوله سازی شی گرایی هست . شما میتونید اما اجازه ندارید متغیر ها یا "پراپرتی های کنترل های موجود در کلاس های دیگر " رو مستقیما تغییر بدید و باید برای هر کلاس پراپرتی ای داشته باشید که اون پراپرتی مقادیر رو از کلاسهای دیگه دریافت کنه و درون متغیر کلاس جاری بریزه . در واقع اگه برای متغیر های کلاسهای مختلف عرضی داشتیم باید به پراپرتی هاشون بگیم که حکم منشی اون کلاس رو دارن .

mahdi87_gh
پنج شنبه 21 مرداد 1389, 07:46 صبح
دوست عزیز اینم نمونه برنامه

Masoome_das
پنج شنبه 21 مرداد 1389, 10:47 صبح
سلام من متوجه نمی شوم که شما می خواهید فرم ها به چه صورتی باز شوند باز شدندشون به هم مربوطه یا نه
فرم دوم روی فرم اول باز می شه؟ یا برعکس بیشتر توضیح بدهید

Masoome_das
پنج شنبه 21 مرداد 1389, 11:24 صبح
سلام این برنامه را برات نوشتم خیلی خوب جواب میده اگه اون چیزی که می خوای درست فهمیده باشم.