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)
برای اینکه خصوصیت 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)