spätes Binden unzulässig

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    spätes Binden unzulässig

    Hallo VB Gemeinde,

    ich habe nun schon die verschiedensten Beiträge zum Thema "spätes Binden bei Option strict on unzulässig" gelesen, finde aber keine Lösung für meinen Fall.
    Ich habe ein Programm bei dem zum Start die COM Ports von Windows ausgelesen und dann in eine Combobox geschrieben werden. Leider kommt oben genannter Fehler bei folgendem Code:

    VB.NET-Quellcode

    1. ' Suche nach verfügbaren Schnittstellen
    2. Private Sub searchcom()
    3. Dim ports As Array
    4. ' auf serielle Ports prüfen
    5. ports = IO.Ports.SerialPort.GetPortNames()
    6. 'gefundene COM Ports anzeigen
    7. For i = 0 To UBound(ports)
    8. frm_settings.cmb_port.Items.Add(ports(i))
    9. Next
    10. ' Wenn nein, dann beenden:
    11. If ports.Length = 0 Then
    12. MessageBox.Show("Es wurden keine COM Ports gefunden!", "kein COM Port gefunden", MessageBoxButtons.OK, MessageBoxIcon.Information)
    13. stat_status.Text = "keine COM Ports verfügbar!"
    14. End If
    15. End Sub


    Kann mir da jemand einen Hinweis geben?!

    Danke! :thumbup:
    ==> seid .net zueinander :D <3 <==

    Axxxxxl schrieb:

    VB.NET-Quellcode

    1. frm_settings.cmb_port.Items.Add(ports(i))
    Gleich 2 Sachen.
    • Machst Du

      VB.NET-Quellcode

      1. frm_settings.cmb_port.Items.AddRange(IO.Ports.SerialPort.GetPortNames())

    • Falls frm_settings der Klassenname und nicht die mit New erstellte Instanz ist, gugst Du Dialoge: Instanziierung von Forms und Aufruf von Dialogen.
    • Ansonsten rufst Du das im Konstruktor oder Form_Load dieser Form selbst auf.


    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    beachte: Der wichtigere, weil prinzipiellere Hinweis ist der von Mono - nämlich: Deklariere den richtigen Datentyp.

    RodFromGermany umgeht das, indem er die gefundenen Portnamen garnet erst an eine Variable zuweist, sondern gleich in die Combo schiebt.
    Das ist hier gut anwendbar und sogar elegant, aber prinzipiell ists unerlässlich, dass man Variablen korrekt deklarieren kann, entsprechend den Werten, die sie aufnehmen sollen.

    Den richtigen Datentyp zu ermitteln ist keine Hexerei.
    Zum einen müsste bereits in der Fehlermeldung auch iwo der richtige Datentyp erwähnt sein - nämlich String().
    Zum andern kann man auch selbst mit Intellisense blitzgeschwind herausfinden, welcher Datentyp erforderlich ist: Video-Tut: Welchen Datentyp hat das Objekt?
    Der Code im verlinkten Video nutzt übrigens ein "neueres" VB.Net-Feature: Type-Inference.
    Also wenn gar kein Datentyp angegeben ist, und stattdessen die Variable sofort initialisiert, hat der Compiler die Möglichkeit, den richtigen Datentyp selbständig abzuleiten.
    Spart Code-Zeilen und "Denk-Muskeln" ;)