کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی
کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

کلینیک فوق تخصصی اکسس ( کاربرد vba در اکسس )

به اشتراک گذاری اطلاعات کسب شده در اکسس از سایت آفیس و سایت های تخصصی خارجی

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


دو جدول ساخته شد یکی شامل دو فیلد Mnu و Title برای رکورد کردن  نامگذاری منوها و عنوان آنها ، در شکل زیر لیبل از سمت راست به چپ با نام های M0 تا M2  می باشند.



جدول Sub با فیلدهای Mnu ، Sub ، Title که نام های منو  ساب منو و عنوان ساب منو در آن رکورد میشوند، نامگذاری لیبل های زیر منو طبق تصویر از S0 تا S7 است.




دستور کار : 

1-تعریف متغیر M در بالاترین رویه برای ذخیره کنترل فشرده شده 

2-تعریف متغیر MnuBkColor در بالاترین رویه برای ذخیره کردن BackColor کنترل لیبل منو که  System Menu Bar تنظیم شده 

3-زمان لود شدن فرم مقدار متغیر MnuBkColor برابر با پراپرتی BackColor یکی از لیبل ها شود فرضا   M0.BackColor

در هرکدام از رویدادهای کلیک لیبل های شکل یک بعنوان منو یک تابع نوشته شده به ترتیب زیر :

 

1-در تابع اگر کنترل فشرده شده مخالف M  و M نال نبود سپس  پراپرتی BackColor مقداری که در M ذخیره شده بشود  

2-تنظیم پراپرتی BackColor کنترل فشرده شده به (RGB(160,200,160

3-برابر کردن M با کنترل فشرده شده 

4-بخاطر اینکه زمان فشرده شده روی منو اگر قبلا فشرده نشده پراپرتی Tag آن تغییر یابد ( برای نمایش یا ویزیبل شدن sub ها و یا ویزیبل نشدنشان ) نوشت  اگر پراپرتی Tag کنترل فشرده شده برابر "" شود به 1 تغییریابد در غیر اینصورت دوباره Tag یک شود

5-لوپ در کنترل های Sub با For.....Next از 0 تا 7 مثل    For i=0 To 7

6-در اینجا مقادیر پراپرتی Tag کنترل فشرده شد ( منو ) کاربرد دارد که اگر یک باشدمی بایست لیبل های Sub   طبق جدول  نامشان ویزیبل شوند وبقیه که در لود فرم نوشتیم کلا Visible=No همان No باشند 

_  & " Me.Controls("s" & i).Visible = IIf(DLookup("Sub", "Sub", "mnu='" & c.Name & "' and

(Sub='" & Controls("s" & i).Name & "'") <> "", True, False"

 _&  " Me.Controls("s" & i).Caption = Nz(DLookup("Title", "Sub", "mnu='" & c.Name & "' and

"'" &  Sub="'" & Controls("s" & i).Name

Me.Controls("s" & i).Left = c.Left

(Me.Controls("s" & i).BackColor = RGB(160, 200, 160

در غیر اینصورت پراپرتی Visible کل لیبل های Sub به No تنظیم شوند که هاید شوند و پراپرتی BackColor کنترل فشرده شده ( منو ) نیز به MnuBkColor تنظیم شود 

کالر لیبل های سابی ( منظور لیبل های عمودی ) که به آبی تغییر پیدا می کنند از رویداد MouseMove آنها استفاده شده و در اینجا هم نیاز به ذخیره کردن نام ساب در یک متغیر است برای مقایسه کردن و تغییر رنگ به جدید و برگرداندن به رنگ قبلی 


دور لیبل های بالا بعنوان منو با کنترل لاین که در نوار Design فرم است  کشیده شده