| |
VB.NET - Ein- und UmsteigerRe: 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. | |
| 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 |
|
|
sevOutBar 4.0
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
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
|
|