Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Petr Novák
Člen
Avatar
Petr Novák:11.11.2021 9:56

Ahoj, jsem začátečník a učím se programování v VB.

V formulářové aplikaci potřebuji nastavit vlastnosti sadě z 25ti objektů. Nastavovat každý zvlášť je iracionální, pro to chci použít na základě zkušenosti z VBA tento skript.

Zkusil jsem:

For a = 1 To 5
    For b = 1 To 5
        mylabel.Name = "Label_O" + CStr(a) + "_" + CStr(b)
        mylabel.Text = ""
    Next
Next

Ten ale nefunguje a vyvolává výjimku System.NullRe­ferenceExcepti­on: Odkaz na objekt není nastaven na instanci objektu.

Chci docílit: Kde je chyba? Děkuji za jakoukoliv použitelnou radu.
S pozdravem, Petr.

 
Odpovědět
11.11.2021 9:56
Avatar
Wikan
Člen
Avatar
Wikan:11.11.2021 12:32

Nenastavuješ vlastnosti 25 objektům, ale 25x jednomu objektu "mylabel". Který navíc nejspíš neexistuje, proto tam máš tu výjimku.

 
Nahoru Odpovědět
11.11.2021 12:32
Avatar
Petr Novák
Člen
Avatar
Petr Novák:11.11.2021 13:30

Ahoj, děkuji za odpověď.

Objekt mylabel je definován takto.

Public Shared mylabel As Label

V For-Nex by měl přebírat vlastnosti objektů Label_O1_21Label_O5_5 a umožnit nastavení vlastností **Text **.

Zvolil jsem postup správně ?

 
Nahoru Odpovědět
11.11.2021 13:30
Avatar
Wikan
Člen
Avatar
Odpovídá na Petr Novák
Wikan:11.11.2021 15:08

Nikoliv. Tomu neexistujícímu objektu se postupně snažíš nastavit Name na Label_O1_21 až Label_O5_5.
Takže místo řádku:

mylabel.Name = "Label_O" + CStr(a) + "_" + CStr(b)

tam zkus něco jako:

mylabel = DirectCast(FindControl("Label_O" + CStr(a) + "_" + CStr(b)), Label)
 
Nahoru Odpovědět
11.11.2021 15:08
Avatar
Petr Novák
Člen
Avatar
Petr Novák:12.11.2021 9:53

Jak má být definovaná funkce/metoda FindControl? Debugger hází výjimku.

 
Nahoru Odpovědět
12.11.2021 9:53
Avatar
Wikan
Člen
Avatar
Odpovídá na Petr Novák
Wikan:12.11.2021 10:53

Tak chybka, má tam být nejspíš tohle:

mylabel = DirectCast(Controls.Find("Label_O" + CStr(a) + "_" + CStr(b), True)(0), Label)
 
Nahoru Odpovědět
12.11.2021 10:53
Avatar
Petr Novák
Člen
Avatar
Petr Novák:15.11.2021 15:13

Paráda!!! Je to právě co jsem potřeboval. Děkuji za pomoc ;-) .

 
Nahoru Odpovědět
15.11.2021 15:13
Avatar
JerryM
Člen
Avatar
JerryM:21.11.2021 14:07

jenom upozorňuju že je rok 2021 teda skoro 2022 a VBA je celkem mrtvej jazyk ... nechceš radši C# ?? protože ... je skoro rok 2022 ... chápeš jo ? jinak historická posloupnost knihoven .NET je MFC (skoro .net :) ), .NET 1.x, 2.x, 3.x, 4., .NET core x.x, .NET5, .NET6 a pak ... WinUI 2022 :) ...

 
Nahoru Odpovědět
21.11.2021 14:07
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.