PDA

View Full Version : سوال: تفاوت this و Form.ActiveForm



Administrative
چهارشنبه 07 بهمن 1394, 18:02 عصر
با سلام خدمت اساتيد .
آقايون بنده سوالي در مورد فرم داشتم.
براي تغيير پراپرتي هاي يك فرم توي سي شارپ ميتونستيم از پنجره پراپرتيس و يكي ديگه هم توي كد نويسي با استفاده از this مثلا‌:

this.Hide(); يا this.BackColor=Colors.Red;
اما يك روش ديگه هم هست كه توي كلاس خود فرم ما هست مثل :

Form1.ActiveForm.BackColor=Color.Red;
خوب تفاوت اين سه روش چيه ؟
خواهشا سطحي توضيح نديد :| چون زياد سرچ كردم و همه ميگن ActiveForm واسه پنجره فعليه :|
ميدونم آقا شما يه چي بدرد بخور بگو لطفا :((

CsharpNevisi
چهارشنبه 07 بهمن 1394, 21:40 عصر
شما کد دوم رو اینطوریم بنویسی جواب میگیری
ActiveForm.BackColor = Color.Red;

من با یه مثالی برات توضیح میدم .. فک کن میخوایی با یه دکمه تکست همون دکمه رو تغییر بدی .. این کدو مینویسی طبیعتا
this.button1.Text = "Hello World .. !!";
ولی خب چون تو کلاس جاری هستی دیگه this رو نمینوسی .. چون ایونت داخل this هستش که این this همون فرمیه که داری توش کد میزنی ... ولی با ActiveForm که دسترسی نداری به دکمه ... دلیلشم اینه که ActiveForm میگه فرمی که فکوس روشه رو بر گردونه .. ممکنه 10 تا فرم باز باشه ولی فکوس روی فرم 5 باشه ... میتونی خصوصیت فرم رو تغییر بدی چون میدونی کلاست از فرم ارث بری کرده ولی دیگه به متد ها و کنترل ها و ... که دسترسی نداری .. چون نمیدونی کدوم فرمه .. مگر اینه کستش کنی به فرمی که مخوایی ...

ما ActiveControl;ActiveForm;ActiveMdiChild هم داریم .. فکر کن میخوایی یه کاستوم کنترلی درست کنی که با فایر شدن یکی از ایونتاش یه کارایی برای فرم انجام بده و این کنترل تو 1000 تا فرم قرار بگیره ... یا مثلا یه فانکشنی که تو یه پریود زمانی خاصی یه عملیاتی روی فرم جاری انجام بده (همون فرمی که کاربر داره روش کار میکنه) ... خب منطقیش اینه که یه بار این فانکشن با یه ترد صدا بشه و تو همه فرم ها صداش نکنیم .. این ترد ActiveForm رو باید پیدا کنه که از طریق همین دستور همین کار رو میکنه