Variablenwert an Textbox in anderer Form übergeben

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Variablenwert an Textbox in anderer Form übergeben

    Hallo Community,

    ich habe ein Problem mit meiner Form/Textbox.

    Folgendes zu meinem Programm:
    Ich habe in Form1 eine Serialport1-Controll, dass Daten zurückgibt - jetzt möchte ich halt, dass diese Daten in Form2 in einer TextBox angezeigt werden.

    Ist das überhaupt möglich was ich vorhabe? Wenn ja, wie gehe ich da genau vor? Gibt es ein Befehl?
    Für jede Hilfe bin ich sehr dankbar!

    Tipps mit Textbox als public setzen und so, habe ich schon versucht, aber funktionieren alle nicht!

    P.S.: Bitte verschieben wenn falsches Forum! Danke!
    entweder mit

    VB.NET-Quellcode

    1. TextBox1.Text = Form1.TextBox1.Text


    oder die My.Settings Eigenschaft oder du speicherst es in einer Variablen

    #edit: verlesen, aber sollte dennoch gleich sein mit

    VB.NET-Quellcode

    1. Textbox1.Text = Form1.Serialport. ' weiter weis ich leider nicht :)
    Hallo!

    Ich würde es so lösen:

    Auf Form2 eine Propery anlegen z.B. SerialPortData:

    VB.NET-Quellcode

    1. private _SerialPortData AS String
    2. Public Property SerialPortData As String
    3. Get
    4. return _SerialPortData
    5. End Get
    6. Set(value As String)
    7. _SerialPortData = value
    8. TextBox1.text = _SerialPortData
    9. End Set
    10. End Property


    Auf Form1 muss nun immer nur die Eigenschaft von Form2 gesetzt werden, wenn Daten ankommen:

    VB.NET-Quellcode

    1. form2.SerialPortData = daten 'Die Daten, welche ankommen
    Eine Fehlermeldung bekomme ich keine.
    Es passiert einfach nichts, habe die Daten, die ich im Serialport1-Datareceive-Event bekomme, in einem Byte-Array abgespeichert.

    Die Daten sind auch korrekt vorhanden.

    Hier ein Teil vom Quelltext:

    VB.NET-Quellcode

    1. 'Einlesen vom SerialPort
    2. Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    3. Dim bytesR As Integer = CInt(SerialPort1.BytesToRead.ToString)
    4. 'Einlesen der Bytes
    5. For i As Integer = 1 To bytesR 'Alle Bytes einzeln lesen
    6. Dim ByteArray() As Byte = {SerialPort1.BaseStream.ReadByte} '1 Byte lesen
    7. If schreibCount < CInt(SerialPort1.ReadBufferSize.ToString) Then
    8. eingelesenDaten(schreibCount) = ByteArray(0)
    9. schreibCount += 1
    10. End If
    11. Next
    12. 'Ausgabe in zweiter Form
    13. If schreibCount = 133 Then
    14. Form2.Textbox1.Text = "Hallo Welt" 'Habe hier jetzt einfach einen String übergeben
    15. End If
    16. End Sub


    @vanitas-mundi:

    Danke für den Tipp, habe es so gemacht, aber es funktioniert leider nicht so.

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

    der geht in die If-Abfrage rein,
    würde ich zum beispiel eine Textbox auf Form1 als Ziel nehmen, bekomme ich die Daten schön angezeigt, nehme ich aber eine Textbox auf einer anderen Form, dann passiert nichts, zeigt mir nichts an.
    Also nochmal Kurz zusammengefasst:

    Du erhältst Daten von dem Serialport, wenn du diese in Form1 in einer Textbox anzeigen lässt funktioniert dies ohne Probleme, aber sobald du es auf Form2 anzeigen lassen willst funktioniert es nicht.

    Das ist meiner Meinung nach sehr merkwürdig.

    Vllt weis hier ja noch jemand anders eine Lösung, ich hab dazu leider nun auch keine Lösung weil mir das selbst Spanisch vorkommt.
    Du hast mein Problem erfasst.
    Habe jetzt schon mehrere Seiten durchgeschaut, einzige Idee, die ich jetzt noch habe, woran es evtl liegen kann,
    dass es etwas mit threadübergreifende Variable oder ähnliches ist...

    Ich schau mir gerade Delegate und Invoke an, aber ob es das richtige weiß ich noch nicht....

    @pzyho:
    Aber trotzdem vielen Dank für deine Hilfe! :)

    VB.NET-Quellcode

    1. Form2.Textbox1.Text = "Hallo Welt"
    2. ' oder
    3. Form2.ControlN.Property = BlaBla
    funktioniert nicht, weil Form2 der Name der Form, nicht aber eine mit New erstellte Instanz ist.
    Leider wird dies von VB.NET toleriert.
    Mach es mal so:

    VB.NET-Quellcode

    1. Private frm As Form2
    2. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    3. If frm Is Nothing OrElse frm.IsDisposed Then
    4. frm = New Form2
    5. End If
    6. If Not frm.Visible Then
    7. frm.Show()
    8. End If
    9. frm.TextBox1.Text = "Hallo Welt"
    10. End Sub
    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!