indexace prvků tvořených za běhu   zodpovězená otázka

VB.NET

A už otravuju znovu...

Potřebuji poradit jak indexovat prvky které si vytvořím za běhu...

zde je můj kód, při kliku na button 2 mi to ale píše IndexOutOfRangeException

Public Class Form1

    Dim kdo As Integer, ind As Integer

    Private _PictureBox() As PictureBox

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        _PictureBox = Me.Controls.OfType(Of PictureBox).OrderBy(Function(PictureBox) PictureBox.TabIndex).ToArray()
    End Sub

    Private Sub PridejObrazek(ByVal a, ByVal b)
        Dim blocek As New PictureBox()
        blocek.Image = Image.FromFile("c:\btn_zs.png")
        blocek.Name = "_PictureBox(" & ind & ")"
        blocek.Size = blocek.Image.Size
        blocek.Location = New Point(a, b)


        AddHandler blocek.Click, New System.EventHandler(AddressOf blocek_Click)
        Me.Controls.Add(blocek)

    End Sub

    Private Sub blocek_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Dim blocek As PictureBox = CType(sender, PictureBox)
        MsgBox("jmeno:" & blocek.Name)
    End Sub

    Private Function Anim(ByVal PocetCyklu, ByVal ParamArray Useky())
        For kdo = 0 To PocetCyklu Step 1
            For Each Var In Useky
                Application.DoEvents()
                _PictureBox(Var).Image = Image.FromFile("c:\nav_b.png") 'ZDE JE PROBLEM!!!
            Next Var
        Next
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        For X = 0 To 100 Step 10
            For Y = 0 To 100 Step 10
                Application.DoEvents()
                Threading.Thread.Sleep(5)
                ind += 1 'pricita cislo prvku
                PridejObrazek(X, Y)
            Next Y
        Next X
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Anim(90, 1, 8, 14)
    End Sub
End Class

potřebuju vytvořit x PictureBoxů(bude načteno ze souboru), vykreslit... A po stisku buttonu2 se provede funkce Anim()- prvni číslo udává celkový počet picture boxů, které bude ta funkce zpracovávat a další jsou indexy těch pictureBoxů... když je tam fyzicky dám tak to funguje! Ale já je potřebuju vytvářet až za běhu v závislosti na hodnotě která bude v souboru

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Proč používáte LINQový dotaz když absolutně netušíte jak to funguje? Nemůže to fungovat z několika důvodů, z nichž ten hlavní je, že do pole _PictureBox() se načítají data pouze jednou při načtení formuláře a v kódu se přidávají PictureBoxy dynamicky za běhu - do kolekce Controls a ne do pole. Řešením je přidávat PictureBoxy do pole ručně (stejnou referenci jako do kolekce Controls).

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Už mi to funguje... díky za radu, jsem začátečník tak se omlouvám, že otravuju takovejma jednoduchejma věcma

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback