vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Problem mit Aktualisierung einer Textbox bei seriellem Empfang 
Autor: Lupus52
Datum: 19.12.16 10:41

Manfred X schrieb:
Zitat:

Hallo!

Du greifst per "Form1" offenbar auf die
Defaultinstanz des
Formulars zu. Allem Anschein nach ist das nicht die Instanz
der
Form-Klasse, deren Textbox Du ansprechen möchtest.

Es gibt diverse Grundregeln im OOP.
Eine lautet sinngemäß, daß Klassen per Methodenaufruf mit
untergeordneten
Klassen kommunizieren und die untergeordneten Klassen
Ereignisse
verwenden, um Informationen zu liefern.
Man sollte NIE von außen auf Controls eines Formulars
zugreifen.



Morgen, danke für die Antwort. Bin gerade weiter am Experimentieren. Deine ganze Ausführung mag richtig sein und Schönheitstechnisch besser bzw. korrekter.

Aber eigentlich müsste mein Weg doch auch technisch korrekt sein?

Ich versuche mal so kurz wie möglioch zusammenzufassen:

Public Class Form1

enthält u.a. einen Open, Sende- und Closebutton und eine Textbox2

Public Class Class_COM

Enthält alles, was ich für die COM nutze.

(Stark abgespeckt)

    Public Shared _serialPort As SerialPort
 
    Public Function OpenCom() As Boolean                              ' 
    ' Schnittstelle öffnen
 
        _serialPort = New SerialPort()          
        _serialPort.PortName = "COM5"
        _serialPort.BaudRate = 115200
        _serialPort.Parity = 0
        _serialPort.DataBits = 8
        _serialPort.StopBits = 1
        _serialPort.RtsEnable = True
        _serialPort.DtrEnable = True
        _serialPort.Handshake = 0
        _serialPort.ReadTimeout = 500           
        _serialPort.WriteTimeout = 500
        _serialPort.Encoding = System.Text.Encoding.Default 'Standard ist  
        ' ASCII 7-Bit
 
        AddHandler _serialPort.DataReceived, AddressOf DataReceivedHandler
 
        Try
            _serialPort.Open()
        Catch ex As Exception
            MsgBox("Comport " & Form1.Comport & " konnte nicht geöffnet werden")
            Return False
        End Try
 
        If _serialPort.IsOpen Then
            Form1.TextBox2.Text = "open" 
            Return True
        Else
            Return False
        End If
 
    End Function
 
    Public Sub WriteCom(message)
        _serialPort.Write(message)
    End Sub
 
    Public Function CloseCom() As Boolean
        _serialPort.Close()
        Form1.TextBox2.Text = "closed"
        Return True
    End Function
 
    Public Shared Sub DataReceivedHandler(sender As Object, e As _
      SerialDataReceivedEventArgs)
        Dim sp As SerialPort = CType(sender, SerialPort)
        Dim indata As String = sp.ReadExisting()
 
        Console.Write("RXX: ")
        Console.WriteLine(indata)
 
        Form1.TextBox2.Text = indata 
 
    End Sub
 
End Class
Öffne ich von Form1 aus per Button die COM, erscheint die obige Message "open" erwartungsgemäß in der Textbox.

Dito bei Close. Klappt auch. Also ist die Interaktion der einen Klasse mit der Form1-Klasse möglich

Sende ich einen Text und er wird empfangen, dann wird das in der Debugausgabe gezeigt.

Dann soll er in die Textbox2 geschrieben werden.

   Private Sub TextBox2_TextChanged(sender As System.Object, e As _
     System.EventArgs) Handles TextBox2.TextChanged
        Dim h As String
        h = TextBox2.Text
    End Sub
Dort löst er das Ereignis "TextChanged" aus. Und der Text ist korrekt auslesbar. Als ist er angekommen.

Er steht in "h", wie man eindeutig sieht wenn man das Programm hier auf einen Breakpoint laufen lässt. Nur wird der nicht in der Box angezeigt. Da bleibt der letzte Text unverändert stehen.

Weder mit Refresh noch Update oder was sonst noch ich alles probiert habe.

Nochmal: 3 Funktionen aus der COM-Klasse senden Text. Bei 2en davon wird der Text von Form1 in der Textbox korrekt "upgedatet". Nur der empfangene Text aus der Empfangsfunktion kommt an, bleibt aber leer bzw. unsichtbar. Und löscht auch nicht den vorherigen Text an der Stelle in der Textbox2

Das ist das Phänomen, das ich nicht verstehe.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Problem mit Aktualisierung einer Textbox bei seriellem Empfa...1.667Lupus5216.12.16 12:41
Re: Problem mit Aktualisierung einer Textbox bei seriellem E...983effeff16.12.16 13:43
Re: Problem mit Aktualisierung einer Textbox bei seriellem E...974Lupus5216.12.16 15:03
Re: Problem mit Aktualisierung einer Textbox bei seriellem E...1.001sv0001016.12.16 17:42
Re: Problem mit Aktualisierung einer Textbox bei seriellem E...1.015Lupus5216.12.16 18:29
Re: Problem mit Aktualisierung einer Textbox bei seriellem E...1.022sv0001016.12.16 19:33
Re: Problem mit Aktualisierung einer Textbox bei seriellem E...1.084Lupus5219.12.16 00:55
Re: Problem mit Aktualisierung einer Textbox bei seriellem E...1.003Manfred X19.12.16 06:20
Re: Problem mit Aktualisierung einer Textbox bei seriellem E...1.060Lupus5219.12.16 10:41
Re: Problem mit Aktualisierung einer Textbox bei seriellem E...1.099Lupus5219.12.16 13:24
Re: Problem mit Aktualisierung einer Textbox bei seriellem E...999Manfred X19.12.16 19:44
Re: Problem mit Aktualisierung einer Textbox bei seriellem E...978Lupus5219.12.16 20:05

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel