TreeViewControl1.Controls.Find: Der Index war außerhalb des Arraybereiches.

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von SeriTools.

    TreeViewControl1.Controls.Find: Der Index war außerhalb des Arraybereiches.

    Hi,

    ich hab ein Problem bei meinem SeriBrowse:
    Ich hab KOPFZERBRECHEN an der Tab-Funktion. Dieses Problem habe ich:

    Ich habe 20 WebBrowser per

    VB.NET-Quellcode

    1. Shared WithEvents wb1 As GeckoWebBrowser
    2. Shared WithEvents wb2 As GeckoWebBrowser
    3. Shared WithEvents wb3 As GeckoWebBrowser
    4. Shared WithEvents wb4 As GeckoWebBrowser
    5. Shared WithEvents wb5 As GeckoWebBrowser
    6. Shared WithEvents wb6 As GeckoWebBrowser
    7. Shared WithEvents wb7 As GeckoWebBrowser
    8. Shared WithEvents wb8 As GeckoWebBrowser
    9. Shared WithEvents wb9 As GeckoWebBrowser
    10. Shared WithEvents wb10 As GeckoWebBrowser
    11. Shared WithEvents wb11 As GeckoWebBrowser
    12. ...
    13. <schade dass man kein array mit withevents benutzen kann...> xD


    deklariert. Dann habe ich diese Funktion gebaut, um schnell und variabel aus die 20 wb's zugreifen zu können:

    VB.NET-Quellcode

    1. Private Function getwb(ByVal count As Integer) As GeckoWebBrowser
    2. getwb = Controls.Find("wb" & CStr(count), True)(0)
    3. End Function


    Es kam der Fehler: "Der Index war außerhalb des Arraybereichs."

    Dann habe ich noch versucht, die WebBrowser mit

    VB.NET-Quellcode

    1. Me.Controls.Add(wb1)
    2. Me.Controls.Add(wb2)
    3. Me.Controls.Add(wb3)
    4. Me.Controls.Add(wb4)
    5. Me.Controls.Add(wb5)
    6. Me.Controls.Add(wb6)
    7. Me.Controls.Add(wb7)
    8. Me.Controls.Add(wb8)
    9. Me.Controls.Add(wb9)
    10. Me.Controls.Add(wb10)
    11. Me.Controls.Add(wb11)
    12. ...


    bei den Me.Controls hinzuzufügen.
    Es kommt aber immernoch bei

    VB.NET-Quellcode

    1. getwb = Controls.Find("wb" & CStr(count), True)(0)
    der Fehler.[/vb]

    Weiß jemand wie ich den Fehler beheben kann?

    Vielen Dank im vorraus,
    serials
    | Keine Fragen per PN oder Skype.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „SeriTools“ ()

    das ist aber ein array und kein Control. Da ich mit aber sicher bin, dass es nur eins davon gibt, kann ich 0 nehmen (anfang des arrays)
    | Keine Fragen per PN oder Skype.
    Moin,
    ohne mich jetzt länger mit Controls.Find beschäftigt zu haben, finde ich deine Syntax mit den 2 Klammern seltsam ... liegt hier vielleicht der Fehler? Hast du mal versucht, was passiert, wenn du mit Controls.Find auf ein Element zugreifen willst, das statisch auf deinem Form liegt?

    Grüße
    Phil
    Vielleicht kannst du das Objekt ja nochmal zu einer Controlcollection (oder Array) Casten oder einfach
    nur in Klammern schreiben und dann den Index dahinter hängen.

    So oder so ähnlich.

    VB.NET-Quellcode

    1. getwb = (Controls.Find("wb" & CStr(count), True))(0)


    Am besten experminentierst du mit dem Quickview zur Laufzeit.
    hallo serials,

    Warum denn dynamisch nicht?

    ich kann hier nichts dynamisches entdecken !

    EDIT:
    als ersten parameter musst du den key des controls angeben.
    was gleichbedeutend mit der name eigenschaft des controls ist.
    vermutlich hast du da nichts angegeben.

    anmerkung:
    deine art die controls (dynamisch) zu verwenden ist mehr als seltsam.

    gruss

    mikeb69
    nee ich meine nicht dynamisch, sondern "nicht-windows-forms-designer-mäßig" ^^

    wenn man dies deklariert:

    VB.NET-Quellcode

    1. Public WithEvents wb1 as GeckoWebBrowser


    Dann ist doch wb1, der Key/Name des Controls, isn't it (oder)?

    Zu dem "seltsam":

    Ich wüsste nicht, wie ich das mit den Tabs sonst hinkriegen könnte...

    @shitbyrd:

    Zu einem Array kann ichs nicht machen, da Arrays keine WithEvents unterstützen.

    Mit den zusätzlichen Klammern funktioniert es allerdings auch nicht. Das gleiche Ergebnis.

    lg serials
    | Keine Fragen per PN oder Skype.
    hallo serials,

    schau dir mal die name eigenschaft deiner controls an.
    die name eigenschaft ist auch der key nachdem find sucht.

    gruss

    mikeb69
    Vielen Dank!

    Durch den Hinweis auf die Name-Eigenschaft bin ich drauf gekommen:

    VB.NET-Quellcode

    1. ...Form1_Load...
    2. ...
    3. ...
    4. ...
    5. MsgBox(wb1.Name)

    MsgBox ist schlechter Stil, ich weiß, aber für nen Test isses halt schneller ^^
    Da kam der Fehler: Der Objektverweis wurde nicht auf eine Objektinstanz...

    Hab vergessen, in Form_Load

    VB.NET-Quellcode

    1. wb1 = New GeckoWebBrowser
    2. ...


    zu schreiben -.-
    Dann muss man jeweils den .Name setzen und die Controls zu Me hinzufügen.

    Nochmals Viiieeelen Dank an dich!

    Bald wird es eine neue Version vom SeriBrowse geben!!!

    lg seritools
    | Keine Fragen per PN oder Skype.
    Hi!

    Zwar ist dieser Thread schon uralt, aber ich habe schon wieder so ein Problem.

    In einem TableLayoutPanel habe sind 6 Labels, die alle ungefähr diesen Textinhalt haben:
    8,79 %
    -6,93 %
    usw.

    Ich möchte das/die Label/s mit dem größten Wert durch eine Änderung der Hintergrundfarbe markieren. Dafür habe ich bis jetzt den folgenden Code (Die Labels sind wirklich vorhanden und werden auch schon angezeigt):

    VB.NET-Quellcode

    1. Private Sub corecolor()
    2. VglArray1 = New Label() {Label8, Label11, Label22, Label27, Label32, Label38}
    3. For Each Labeli As Label In VglArray1
    4. Single.TryParse(Labeli.Text.Substring(0, Labeli.Text.Length - 2), VglNo1)
    5. If VglNo1 > BestplaceNo1 Then
    6. BestplaceNo1 = VglNo1
    7. End If
    8. Next
    9. For Each labeli As Label In VglArray1
    10. Single.TryParse(labeli.Text.Substring(0, labeli.Text.Length - 2), VglNo1)
    11. If VglNo1 = BestplaceNo1 Then
    12. Array.Resize(bestlabelno1, bestlabelno1.Length + 1)
    13. bestlabelno1(bestlabelno1.Length - 1) = labeli
    14. End If
    15. Next
    16. For Each labeli As Label In bestlabelno1
    17. For Each cont As Control In TableLayoutPanel1.Controls.Find(labeli.Name, True)
    18. cont.BackColor = Color.LightBlue
    19. Next
    20. Next
    21. [...] 'unwichtiger weiterer Code


    Deklaration der Variablen:

    VB.NET-Quellcode

    1. Shared BestplaceNo1 As Single
    2. Shared bestlabelno1(0) As Label
    3. Shared VglNo1 As Single
    4. Shared VglArray1(0) As Label


    Es kommt immernoch der Fehler mit dem Objektverweis... .

    Kann mir da jemand helfen?

    Vielen Dank im vorraus

    lg SeriTools
    | Keine Fragen per PN oder Skype.
    Nein, das kann nicht sein, da die Labels ja währed der Code ausgeführt wird, angezeigt werden. Sie sind auf jeden Fall instanziert.

    Trotzdem Dankeschön.

    Vielleicht weißt du oder jemand anderes ja eine Lösung.
    Ich freue mich jedenfalls schonmal auf eine Antwort.

    lg SeriTools
    | Keine Fragen per PN oder Skype.
    Hab das Problem gefunden:

    Durch das Array.Resize fangen die ausgewählten Labels erst bei bestlabelno(1) an statt bei (0)

    lg SeriTools
    | Keine Fragen per PN oder Skype.