Nabídka portálu se při zobrazení článku přesouvá na konec pravého sloupce nabídek.
Vlastni parametry ke kontrolnímu prvku OCX ve VB |
Autor: Kočí Marek
| Zdroj:
| Vytvořeno: 11.11.2003
| Publikováno: 11.11.2003
| Čtenářů: 2630
| Unikátních: 2579
|
Jak přidat libovolný počet parametrů k cizímu ovladacímu prvku?
Dost často se stává, že k již hotovému (cizímu) kontrolnímu prvku potřebujeme přidat náš parametr.Jak na to?
Většina z Vás již určitě použila vlastnost Tag.Moje řešení ji využívá také, ale mohu vložit, vyzvednout a mazat
vlastních parametrů libovolné množství.
Jak že to funguje? Do vlastnosti tag dám řetězec složený ze všech parametrů a hodnot oddělený
oddělovačem.S hodnotami pak mohu pracovat pomocí dvou funkcí a jedné procedury.
Pro vložení/úpravu slouží:
Funkce GetUserParam(KontrolniPrvek,JmenoParametru) As Variant
Pro vyzvednutí
Funkce LetUserParam(KontrolniPrvek,JmenoParametru,Hodnota)
Pro výmaz parametru
Funkce DelUserParam(KontrolniPrvek,JmenoParametru)
KontrolniPrvek je reference na prvek, u kterého s parametry manipulujeme
JmenoParametru je náš název parametru
Hodnota je naše hodnota parametru.
Následuje plně komentovaný zdrojový kód funkcí a procedur.A nakonec ještě příklad použití.
Private Const COddelovac As String = "~|~"
Private Function GetUserParam( _
ByRef cnt As Control, _
ByVal ParamName As String _
) As Variant
Dim arrParams
Dim i As Long
If cnt.Tag <> "" Then
If InStr(1, cnt.Tag, COddelovac & _
UCase(ParamName), _
vbBinaryCompare) > 0 Then
arrParams = Split(cnt.Tag, COddelovac)
For i = LBound(arrParams) To UBound(arrParams)
If Mid(arrParams(i), 1, Len(ParamName)) _
= UCase(ParamName) Then
Exit For
End If
Next
GetUserParam = Mid(arrParams(i), Len(ParamName) + 1)
ElseIf Mid(cnt.Tag, 1, _
Len(ParamName)) = UCase(ParamName) Then
GetUserParam = Mid(cnt.Tag, Len(ParamName) + 1)
Else
GetUserParam = ""
End If
Else
GetUserParam = ""
End If
End Function
Private Function LetUserParam( _
ByRef cnt As Control, _
ByVal ParamName As String, _
ByVal ParamVal As Variant _
) As Variant
Dim arrParams
Dim i As Long
If cnt.Tag <> "" Then
If InStr(1, cnt.Tag, COddelovac & _
UCase(ParamName), _
vbBinaryCompare) > 0 _
Or _
Mid(cnt.Tag, 1, _
Len(ParamName)) = UCase(ParamName) _
Then
arrParams = Split(cnt.Tag, COddelovac)
For i = LBound(arrParams) To UBound(arrParams)
If Mid(arrParams(i), 1, Len(ParamName)) _
= UCase(ParamName) Then
Exit For
End If
Next
arrParams(i) = UCase(ParamName) & _
CStr(ParamVal)
cnt.Tag = Join(arrParams, COddelovac)
Else
cnt.Tag = cnt.Tag & COddelovac & _
UCase(ParamName) & _
ParamVal
End If
Else
cnt.Tag = UCase(ParamName) & _
ParamVal
End If
End Function
Private Function DelUserParam( _
ByRef cnt As Control, _
ByVal ParamName As String _
) As Boolean
Dim arrParams
Dim i As Long
Dim preskoc As Long
preskoc = -1
If cnt.Tag <> "" Then
If InStr(1, cnt.Tag, COddelovac & _
UCase(ParamName), _
vbBinaryCompare) > 0 Then
arrParams = Split(cnt.Tag, COddelovac)
For i = LBound(arrParams) To UBound(arrParams)
If Mid(arrParams(i), 1, Len(ParamName)) _
= UCase(ParamName) Then
preskoc = i
Exit For
End If
Next
cnt.Tag = ""
For i = LBound(arrParams) To UBound(arrParams)
If i <> preskoc Then
cnt.Tag = cnt.Tag & arrParams(i) & COddelovac
End If
If Right(cnt.Tag, 3) = COddelovac And i = 1 Then
cnt.Tag = Mid(cnt.Tag, 1, Len(cnt.Tag) - 3)
End If
Next
DelUserParam = True
ElseIf Mid(cnt.Tag, 1, _
Len(ParamName)) = UCase(ParamName) Then
cnt.Tag = ""
DelUserParam = True
Else
DelUserParam = False
End If
Else
DelUserParam = False
End If
End Function
A takto se procedury a funkce používají:Na formuláři mám textove pole text1 a text2 a tři
tlačítka v text1 mám Název mého parametru v text2 jeho hodnotu.Tlačítkem 1 přidávám(upravuji) hodnotu,
tlačítkem2 jí vypisuji msgboxem a tlačítkem 3 jí mažu.
Private Sub Command1_Click()
LetUserParam Label1, Text1.Text, Text2.Text
End Sub
Private Sub Command2_Click()
MsgBox GetUserParam(Label1, Text1.Text)
End Sub
Private Sub Command3_Click()
DelUserParam Label1, Text1.Text
End Sub
|