PDA

View Full Version : آموزش: استفاده از خصوصیت Tag کنترلها جهت اعمال Enabled,Visible, ... بروی کنترلهای یک فرم بصورت گروهی



Abbas Amiri
پنج شنبه 18 خرداد 1391, 20:22 عصر
با استفاده ازخصوصیت Tag یک گروه از کنترلها می توان آنها را از گروه دیگر تشخیص داده و با استفاده از آن ، به خصوصیت های تعدادی از کنترلهای بخصوص در یک فرم مقادیری منتسب کرد . به طور مثال ممکن است شما بخواهید تعدادی از کنترلهای یک فرم که جهت مصارف ویژه ای تعبیه شده اند را مخفی یا نمایان و Enable یا disable ویا ... کنید در اینحالت بجای اینکه خصوصیت مورد نظر کنترله را تک تک به آنها اعمال کنید با استفاده از خصوصیت Tag و روال زیر به آسانی قابل انجام است.
برای اینکه خصوصیت Tag تعدادی ازکنترلها را مقداردهی کنید کافیست آنهارا انتخاب کرده ودر Properties>>Other در آخرین ردیف خصوصیت تگ آنهارا مقدار بدهید


Public Enum prpAction
Enabled
Visible
Locked
TabStop
Value
End Enum

' درزمان فراخواني زيرروال جهت
'Enabled , Visible
' فوکوس روي کنترل مشمول تغيير نباشد
Sub SetPrpOfCtrlGroup(frm As Form, Action As prpAction, _
varSet, Tag As String, Optional blnInverseOthers As Boolean = False, Optional CtlType As AcControlType = -1)
On Error Resume Next
Dim ctl As Control
Dim TagMatch As Boolean
'Dim ctlFocusTag As String
'ctlFocusTag = Screen.ActiveForm.ActiveControl.Tag
'If CBool(InStr(Tag, ctlFocusTag)) And Not (ctlFocusTag = "") Then
' MsgBox "فوکاس روي کنترل " & vbCr & Screen.ActiveForm.ActiveControl.Name & _
' vbCr & " است وامکان تغيير خصوصيت مورد نظر روي اين کنترل وجودندارد", vbMsgBoxRight
'End If
For Each ctl In frm.Controls
TagMatch = CBool(InStr(Tag, ctl.Tag)) And Not (ctl.Tag = "")
If (ctl.ControlType And CtlType) And TagMatch Then
Select Case Action
Case Enabled
ctl.Enabled = varSet
Case Locked
ctl.Locked = varSet
Case Value
ctl.Value = varSet
Case Visible
ctl.Visible = varSet
Case TabStop
ctl.Visible = varSet
End Select
ElseIf blnInverseOthers Then
Select Case Action
Case Enabled
ctl.Enabled = Not varSet
Case Locked
ctl.Locked = Not varSet
Case Visible
ctl.Visible = Not varSet
Case TabStop
ctl.TabStop = Not varSet
End Select
End If
Next
End Sub


مثال ها:


SetPrpOfCtrlGroup Me, Enabled, False, "2"
' کنترلهایی که مقدار تگ آنها برابر 2 است خصوصیت
' Enabled آنها False میشود
SetPrpOfCtrlGroup Me, Visible, True, "12", True
' کنترلهایی که مقدار تگ آنها برابر 1ویا2 است خصوصیت
' Visible آنها True میشود
' وبقیه کنترلها مخفی میشوند
SetPrpOfCtrlGroup Me, Value, Null, "1234", False, (acTextBox Or acComboBox Or acListBox)
کنترلهایی که مقدار تگ آنها برابر 1ویا2ویا3ویا4 وازنوع
' TextBoxیا ComboBox یا ListBox
' مقدار آنهاNull میشود



اگر میخواهید مثل مثالهای 2 و 3 چند تگ را همزمان داشته باشید از مقادیر تک کارکتری جهت خصوصیت Tag استفاده کنید (مانند اعداد 0-9 و حروف a-z)

Abbas Amiri
پنج شنبه 18 خرداد 1391, 20:29 عصر
مثال جهت خصوصیت Tag برای چندکنترل

88001

abas1388
پنج شنبه 18 خرداد 1391, 23:29 عصر
با سلام و عرض تشكر از جناب اميري بخاطر آموزش جديدشان
يك سؤال:
آيا استفاده از خصوصیت Tag برای چندکنترل ، غير از حالتهاي visible ، enable و null ميتوان براي تغيير رنگ يا تغيير فونت چند كنترل با tag مساوي استفاده كرد؟
با تشكر

Abbas Amiri
جمعه 19 خرداد 1391, 00:26 صبح
بله خصوصیتهایی که درحالت RunTime قابل تغییر هستند را میتوان تغییرداد مانند: ForeColor, BackColor, FontSize, FontBold وغیره . برای سهولت خصوصیتهای مورد نیاز را به لیست Enumeration اضافه کنید (Enum PrpAction)
ودر دستور Select Case هم باید اضافه شوند

G.hemati
یک شنبه 03 شهریور 1392, 21:01 عصر
با سلام
آیا میشه با استفاده از ماژول جناب امیری ، در رویداد کلیک یک باتون دستوری نوشت که مثلاً کنترلهایی که Tag آنها برابر با 1 و 2 است مقدار آنها برابر با Null نباشد .

یعنی اگر کنترلهای مذکور خالی شدند و کاربر یادش رفت تکمیل کنه یه هشدار برگردونه . و مجبور نباشیم برای هر کنترل جداگانه دستور بنویسیم

Abbas Amiri
دوشنبه 04 شهریور 1392, 01:53 صبح
با سلام
آیا میشه با استفاده از ماژول جناب امیری ، در رویداد کلیک یک باتون دستوری نوشت که مثلاً کنترلهایی که Tag آنها برابر با 1 و 2 است مقدار آنها برابر با Null نباشد .

یعنی اگر کنترلهای مذکور خالی شدند و کاربر یادش رفت تکمیل کنه یه هشدار برگردونه . و مجبور نباشیم برای هر کنترل جداگانه دستور بنویسیم

این ماژول بیشتر به درد فرم های Unbound می خوره . تا بعد از ذخیره مقادیر فیلد ها با مقادیری که ارسال می کنیم (معمولا Null) فرم آماده دریافت مقادیر جدید بشود .

برای مورد شما باید بصورت عادی در رویداد After_Update کنترلها ، کدها مورد نظر را نوشت.