PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : پیدا کردن کنترل فعال درون کنترل های Container



s.cheraghi
2015/09/13, 13:14
سلام
مدتی هست که در حال ایجاد یک پروژه VBA هستم، تو یکی از یوزرفرم ها از یک Multipage استفاده کردم و داخل آنها از Frame و درون فریم ها کنترل های موردنظر قرار داده شده.
وقتی تعداد کنترل ها درون یوزرفرم زیاد بشه برای جلوگیری از سردرگمی و کم شدن حجم کدها باید کدهای جنرال (عمومی یا همه کاره، هر اسمی که دوست دارین) بیشتری استفاده کنین.
در این جور موارد دانستن کنترل فعال بسیار کاربردی هست (مخصوصا اینکه نام معنا داری برای هر کنترل درنظر گرفته باشین که با استفاده از آن مکان، نوع، محتوا و یا هر چیز دیگری را به شما اطلاع دهد).
در این مورد میتونی از خاصیت ActiveControl استفاده کنین ولی با فرمی که من داشتم همیشه جواب MultiPage هست!!! :(
راه حل زیر به ذهنم رسید که بهم جواب داد:



Function ActiveChild(Parent As Control) As ControlSelect
Case Left(Parent.Name, 4)
Case "Fram", "Page"
Set ActiveChild = ActiveChild(Parent.ActiveControl)Case Else Set ActiveChild = ParentEnd SelectEnd Function
این تابع یک تابع recursive هست که با فراخوانی خودش، یک چرخه ایجاد میکنه تا جائیکه در آخرین مرحله به جواب برسه و این جواب رو برمیگردونه!!! (مثل اینکه شما یک جعبه بزرگ داشته باشین که داخلش یک جعبه کوچیکتر هست و داخل اون یک جعبه دیگه و این جعبه ها همینطور درون هم قرار گرفته اند تا جائیکه آخرین جعبه باز بشه و محتویاتش بیرون کشیده بشه )

مفهوم کد اینه:
یک Container Control (که همون MultiPage یا Frame هست) رو بهش میدیم. تابع بررسی میکنی که کنترل فعال این کنترل چی هست؟ اگه یک کنترل ساده باشه که به عنوان جواب برگردانده میشه ولی اگه دوباره کنترل فعال یک کنترل Container باشد. با فراخوانی تابع و دادن این کنترل بهش کنترل فعال درون اون رو بررسی میکنیم ( انگار در جعبه بعدی رو باز میکنیم ) انقد این کار ادامه پیدا میکنه که بلاخره یک کنترل ساده پیدا بشه و به عنوان جواب در آخرین تکرار تابع برگردونده بشه، حالا دیگه کار توابعی که در این مدت فراخوانی شدن برگردوندن اون جوابه تا اینکه به اولین تابع برسه و به شما تحویل بده، حالا شما میتونین از روی اسم تابع اطلاعاتی رو که میخواین بگیرین.
ساده هست ولی باید یکم تمرکز کنین.