Hromadné blokování prvků rozesetých po formuláři

Poměrně častou úlohou je obsloužit více prvků na formuláři, které se mají objevit či být dostupné pouze v určitém kontextu. Je-li možné je seskupit do rámečku (Frame), nebo mají vlastnost GroupName, máme vyhráno. Co když jsou ale rozmístěny po celém formuláři „cikcak“ a kombinací je spousta? Předložené řešení využívá ParamArray coby poslední parametr procedury, který obsáhne blíže nespecifikovaný výčet předaných objektů typu Variant – v daném případě prvky formuláře. Akce je v příkladu spuštěna po klepnutí do prázdného místa formuláře.

Hromadné blokování prvků rozesetých po formuláři
Hromadné blokování prvků rozesetých po formuláři
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Private Sub UserForm_Click()

    PovolitPrvky False, CheckBox1, CommandButton1, CommandButton3
    'ZamknoutPrvky True, CheckBox1, CommandButton1, CommandButton3
   
End Sub

Sub PovolitPrvky(blnPovolit As Boolean, ParamArray objPrvky() As Variant)
   
    Dim objPrvek As Variant
   
    'pro každý prvek...
    For Each objPrvek In objPrvky
        'změna stavu prvku
        objPrvek.Enabled = blnPovolit
    Next objPrvek
   
End Sub

Sub ZamknoutPrvky(blnZamknout As Boolean, ParamArray objPrvky() As Variant)
   
    Dim objPrvek As Variant
   
    'pro každý prvek...
    For Each objPrvek In objPrvky
        'změna stavu prvku
        objPrvek.Locked = blnZamknout
    Next objPrvek
   
End Sub

Kód nabízí dvě procedury – PovolitPrvky a ZamknoutPrvky. Rozdíl mezi nimi je v užití dvou mírně odlišných vlastností Enabled a Locked. Nejviditelnější je to, že Enabled = False doprovází ne všemi milovaný grafický efekt „rytiny“ – zešedivění a stínování. U textového pole Enabled = False nedovolí nejen změnu textu v něm, ale ani výběr řetězce, zatímco při Locked = True text sice nezměníte, ale můžete jej vybrat (a zkopírovat).

Tip: O přepínání stavu se postará operátor Not.

1
2
3
    With TextBox1
        .Locked = Not .Locked
    End With