PDA

View Full Version : آموزش: غیر فعال کردن تمامی کنترل های یک فرم بصورت بازگشتی



mohammad_kazem
پنج شنبه 18 دی 1393, 22:52 عصر
با عرض سلام و خسته نباشید خدمت تمامی دوستان عزیزم. امروز تصمیم گرفتم یک مبحث آموزشی ساده رو توی تالار بزارم. اگه با استقبال دوستان مواجه شد، ایشالا سعی میکنم به این کار ادامه بدم و تکه کدهای نکته دار و حرفه ای تری رو در اینجا قرار بدم.
فرض کنید یک فرم داریم که حاوی چندتا کنترل هستش. میخوایم در هنگام لود شدن فرم، همه کنترل های داخل فرم بجز یک کنترل خاص(مثلا یک دکمه) غیر فعال بشن. شاید این کار رو کرده باشید. اما اینجا من بصورت بازگشتی میخوام این کار رو انجام بدم. اول تو رویداد لود صفحه کد زیر رو مینویسیم:


Private Sub form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
DisableControls(Me)
EnableControls(Button1)
End Sub

تا اینجا که توضیح خاصی لازم نیست. دو متد نوشتیم که اونا رو فراخوانی کردیم. فرم رو به متد disablecontrols و دکمه مورد نظرمون رو به متد enablecontrols فرستادیم.
متد disablecontrols رو به شکل زیر مینویسیم

Sub DisableControls(ByVal Ctrl As Control)
For Each c As Control In Ctrl.Controls
DisableControls(c)
Next
Ctrl.Enabled = False
End Sub


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

Sub EnableControls(ByVal ctrl As Control)
If ctrl IsNot Nothing Then
ctrl.Enabled = True
EnableControl(ctrl.Parent)
End If
End Sub


میدونیم که برای اینکه یک کنترل فعال باشه، باید پدرش هم فعال باشه. لذا توی این متد، اول چک میکنیم که کنترلمون null نباشه.اگه null نبود اول خودشو فعال کرده و بعد کنترل پدرشو به همین متد پاس میدیم. به این ترتیب کنترل فعال میشه.
لینک آموزش به زبان سی شارپ (http://barnamenevis.org/showthread.php?482092-%D8%BA%DB%8C%D8%B1-%D9%81%D8%B9%D8%A7%D9%84-%DA%A9%D8%B1%D8%AF%D9%86-%D8%AA%D9%85%D8%A7%D9%85%DB%8C-%DA%A9%D9%86%D8%AA%D8%B1%D9%84-%D9%87%D8%A7%DB%8C-%DB%8C%DA%A9-%D9%81%D8%B1%D9%85-%D8%A8%D8%B5%D9%88%D8%B1%D8%AA-%D8%A8%D8%A7%D8%B2%DA%AF%D8%B4%D8%AA%DB%8C)