Ich steh aufm Schlauch..kein Text in TextBox1

  • VB.NET

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von hheck.

    Ich steh aufm Schlauch..kein Text in TextBox1

    Ich hab ein TextBox1- Fenster mit Multiline.
    Im Code hab ich stehen:
    TextBox1.Text = "Incoming"
    aber in der TextBox1 kommt nix an. (Hab schon mal alles andere auskommentiert)

    Was kann ich übersehen haben?

    Gruß
    Helle
    W64/VB-Net

    Quellcode

    1. 'Public returnStr As String
    2. 'Private com1 As Object
    3. Public Sub Main()
    4. Dim TextBox1 As TextBox = Nothing
    5. 'Dim returnStr As String = ""
    6. 'returnStr = com1.ReadLine() 'ReceiveSerialData(returnStr) 'com1.ReadLine()
    7. TextBox1.Text = "Incoming"
    8. End Sub
    9. 'Function ReceiveSerialData() 'As String
    10. ' Receive strings from a serial port.
    11. ' Dim returnStr As String = ""
    12. 'Dim com1 As IO.Ports.SerialPort = Nothing
    13. 'Try
    14. 'com1.BaudRate = 115200
    15. 'com1.DataBits = 8
    16. 'com1.StopBits = IO.Ports.StopBits.One
    17. 'com1.Parity = IO.Ports.Parity.None
    18. 'com1 = My.Computer.Ports.OpenSerialPort("com1")
    19. 'com1.ReadTimeout = 10000
    20. 'Do
    21. 'Dim Incoming As String = COM1.ReadLine()
    22. 'If Incoming Is Nothing Then
    23. 'Exit Do
    24. 'Else
    25. 'returnStr &= Incoming & vbCrLf
    26. 'End If
    27. 'Loop
    28. 'Catch ex As TimeoutException
    29. 'returnStr = "Error: Serial Port read timed out."
    30. 'Finally
    31. 'If com1 IsNot Nothing Then com1.Close()
    32. 'End Try
    33. 'TextBox1.Text = "hallo " & returnStr
    34. 'Return returnStr
    35. 'End Function
    36. End Class

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „hheck“ ()

    Coldfire schrieb:

    Mir eraschließt nicht der Sinn von

    Quellcode

    1. Dim TextBox1 As TextBox = Nothing


    VB1963 schrieb:

    @hheck
    Wie mein Vorposter bereits anmerkte...
    Bei der Zeile mit der Textzuweisung:
    TextBox1.Text = "Incoming"
    muss sogar eine Fehlermeldung geworfen werden!


    Ich hab keine Ahnung, was das obere Zitat bedeutet. Aber nachdem ich das blind gestochert eingefügt hatte, war wenigstens keine Fehlermeldung mehr da. Auch das zweite Zitat liefert keine. Lediglich im TextBox1 erscheint nix.
    Ich will ja nur Zugriff auf die Daten, die ein ESP01 an den Monitor liefert und nicht programmieren lernen.

    petaod schrieb:

    Zitat von hheck: „Dim TextBox1 As TextBox = Nothing“Hast du bereits im Designer eine Textbox auf der Form angelegt?
    Dann ist es kontraproduktiv, die nochmals zu DIMensionieren.
    Lass diese Zeile mal weg.

    Ja, hab ich, sonst wüßte ich ja nicht, daß das Fester nicht reagiert. Ohne diese Zeile gabs die Aufforderung die Box zu deklarieren?
    Jetzt hab ich mal ohne probiert: keine Fehlermeldung aber immer noch kein Text in der Box!
    Public Sub Main()
    sieht mir aus wie eine Console-Anwendung.
    @hheck Erstell ein neues WinForm-Projekt.
    Ziehe im Designer eine TextBox und einen Button auf die Form.
    Doppelklicke auf den Button im Designer.
    Füge in der Prozedur Button1_Click() den Code

    VB.NET-Quellcode

    1. TextBox1.Text = "Incoming"
    ein.
    Starte das Projekt und drücke auf den Button.
    =====
    @AKP Die eerste Zeile ist eine Deklaration und hat als solche nix in der Form_Load zu suchen.
    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!
    @petaod
    Ist es das, was du sehen willst?

    <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
    Partial Class Form1
    Inherits System.Windows.Forms.Form

    'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
    <System.Diagnostics.DebuggerNonUserCode()>
    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
    Try
    If disposing AndAlso components IsNot Nothing Then
    components.Dispose()
    End If
    Finally
    MyBase.Dispose(disposing)
    End Try
    End Sub

    'Wird vom Windows Form-Designer benötigt.
    Private components As System.ComponentModel.IContainer

    'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
    'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
    'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
    <System.Diagnostics.DebuggerStepThrough()>
    Private Sub InitializeComponent()
    Me.components = New System.ComponentModel.Container()
    Me.TextBox1 = New System.Windows.Forms.TextBox()
    Me.SerialPort1 = New System.IO.Ports.SerialPort(Me.components)
    Me.SuspendLayout()
    '
    'TextBox1
    '
    Me.TextBox1.Location = New System.Drawing.Point(63, 48)
    Me.TextBox1.Multiline = True
    Me.TextBox1.Name = "TextBox1"
    Me.TextBox1.Size = New System.Drawing.Size(567, 338)
    Me.TextBox1.TabIndex = 0
    '
    'SerialPort1
    '
    Me.SerialPort1.BaudRate = 115200
    '
    'Form1
    '
    Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
    Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
    Me.ClientSize = New System.Drawing.Size(663, 450)
    Me.Controls.Add(Me.TextBox1)
    Me.Name = "Form1"
    Me.Text = "Form1"
    Me.ResumeLayout(False)
    Me.PerformLayout()

    End Sub
    Friend WithEvents TextBox1 As TextBox
    Friend WithEvents SerialPort1 As IO.Ports.SerialPort
    End Class

    RodFromGermany schrieb:

    Public Sub Main()
    sieht mir aus wie eine Console-Anwendung.
    @hheck Erstell ein neues WinForm-Projekt.
    Ziehe im Designer eine TextBox und einen Button auf die Form.
    Doppelklicke auf den Button im Designer.
    Füge in der Prozedur Button1_Click() den Code

    VB.NET-Quellcode

    1. TextBox1.Text = "Incoming"
    ein.
    Starte das Projekt und drücke auf den Button.
    =====
    @AKP Die eerste Zeile ist eine Deklaration und hat als solche nix in der Form_Load zu suchen.


    So, das hat funktioniert. Nur verstanden hab ich nix warum.
    (Ich hatte den ganzen Bettel aus einem Beispiel kopiert.)

    hheck schrieb:

    Nur verstanden hab ich nix warum.
    Du musst natürlich das Projekt so aufbauen, wie Du es brauchst.
    Wenn meine Vermutung mitr der Console-Anwendung richtig war, solltest Du, bevor Du Dein eigentliches Problem bearbeitest,
    ausprobieren, was das Studio alles anbietet, um dann besser entscheiden zu können, mit welcher Vorlage Du welche Probleme lösen kannst.
    Arbeite zunächst mit ganz kleinen Schritten, mach nur eine kleine Änderung und überzeuge Dich davon, dass der Rest noch läuft.
    Wenn Du dann fit bist, kannst Du auch größere Schritte wagen.
    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!
    Nachdem ich nun einen gelesenen Text auch in die TextBox1 bekomme (Dank RodFromGermany), kommt die nächste Hürde:
    Obwohl eindeutig am COM1 Daten eigehen ,Terminal.exe und IDE-Monitor zeigen Sie an, liest VB hier nix. Incoming ist leer!??

    Quellcode

    1. Public Class Form1
    2. Public Incoming As String
    3. Public returnStr As String
    4. Public com1 As Object
    5. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    6. 'ReceiveSerialData()
    7. returnStr &= "hallo" & Incoming & vbCrLf
    8. TextBox1.Text = returnStr
    9. End Sub
    10. Function ReceiveSerialData() As String
    11. ' Receive strings from a serial port.
    12. 'returnStr = ""
    13. Dim COM1 As IO.Ports.SerialPort = Nothing
    14. Try
    15. COM1 = My.Computer.Ports.OpenSerialPort("COM1")
    16. COM1.ReadTimeout = 1000
    17. Do
    18. Incoming = COM1.ReadLine()
    19. If Incoming Is Nothing Then
    20. Exit Do
    21. Else
    22. returnStr &= Incoming & vbCrLf
    23. End If
    24. Loop
    25. Catch ex As TimeoutException
    26. returnStr &= "Error: Serial Port read timed out."
    27. Finally
    28. If COM1 IsNot Nothing Then COM1.Close()
    29. End Try
    30. Return returnStr
    31. End Function
    32. End Class

    @Haudruferzappeltnoch Jou.
    @hheck Erstell genau eine Instanz von SerialPort, initialisiere sie korrekt (Boudrate und solch) und öffne das Port.
    Und verwende den System.IO.Ports-Namespace.
    Schau mal hier rein:
    learn.microsoft.com/de-de/dotn…strings-from-serial-ports
    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!
    Aber Rod,
    genau das ist doch der Code!
    Inzwischen hab ich mal:

    Quellcode

    1. Sub GetSerialPortNames()
    2. ' Show all available COM ports.
    3. For Each sp As String In My.Computer.Ports.SerialPortNames
    4. ListBox1.Items.Add(sp)
    5. Next
    6. End Sub

    laufen lassen.
    Dabei werden mir garkeine SPorts angzeigt, obwohl andere Programme mit COM1 laufen(s.o.).
    Im Geräte-Manager werden auch beide (COM1 und COM3(USB)) angezeigt.

    hheck schrieb:

    genau das ist doch der Code!
    Nö.
    Schmeiß den My-Namespace raus und nimm System.IO.
    Probier mal dies:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. Me.ComboBox1.Items.AddRange(IO.Ports.SerialPort.GetPortNames())
    4. If Me.ComboBox1.Items.Count > 0 Then
    5. Me.ComboBox1.SelectedItem = 0
    6. Else
    7. Me.TextBox1.Text = "kein Port gefunden"
    8. End If
    9. Me.Button1.Enabled = (Me.ComboBox1.Items.Count > 0)
    10. End Sub
    11. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    12. If Me.SerialPort1.IsOpen Then
    13. Me.SerialPort1.Close()
    14. End If
    15. Me.SerialPort1.PortName = Me.ComboBox1.Text
    16. Me.SerialPort1.BaudRate = 83400
    17. Me.SerialPort1.NewLine = Environment.NewLine
    18. Me.SerialPort1.Open()
    19. End Sub
    20. Private Sub SerialPort1_DataReceived(sender As Object, e As IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    21. Dim txt = Me.SerialPort1.ReadExisting
    22. Me.Invoke(Sub() Me.TextBox1.Text = txt)
    23. End Sub
    24. End Class
    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!
    So, Rod, das hat auch gefunzt. In der ComboBox1: COM1 und COM3!
    In der TextBox1 der Eingang der ausgewählten Seriellen.
    Jetzt hab ich die Daten in einer Variablen und kann die grafisch aufbereiten, was mein eigentliches Ziel ist.
    Danke für deine Geduld mit einem 85jährigen Ahnungslosen.
    Gruß
    Helle