Funktion gibt keinen Wert zurück, obwohl 'vorhanden'

  • VB.NET
  • .NET (FX) 4.0

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Drahuverar.

    Funktion gibt keinen Wert zurück, obwohl 'vorhanden'

    Hey,

    ich hab hier mal ein Beispielprojekt im Anhang. Durch Eingabe in die TextBox und klicken wird eine neue Form geöffnet, diese Form nimmt den Text der Eingabe über eine Funktion.. gleiches spiel bei der 2. Form, diese ruft eine 3. auf und diese ist nun komischerweise leer, obwohl der Text (String) gespeichert wird...

    Hat einer eine Idee warum?
    Liegt es am Using?

    Problem in der Praxis:
    Ich habe einmal ein Anmeldeformular; Wenn die Eingaben stimmen wird eine 2. Form geöffnet (Using ... as New FormName....ShowDialog)
    Der User kann Eingaben tätigen etc, kein Problem. Wenn ich hier auf der 2. Form allerdings nochmal eine Form öffne kann ich mir einen Private String über eine Public Function nicht zurückgeben lassen und ich hab keine Ahnung wieso.
    Es muss doch eigentlich funktionieren.

    Edit:
    Momentan behelfe ich mir damit weiter, dass ich in meiner 3. Form Public Strings deklariere und beim Aufruf

    VB.NET-Quellcode

    1. Using frm as New FormXYZ
    2. frm.stringname ="Irgendeine Zeichenkette

    den Wert übergebe...

    Gruß,
    Drahuverar
    Dateien
    • Text.zip

      (88,07 kB, 107 mal heruntergeladen, zuletzt: )
    Option Strict On!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Drahuverar“ ()

    VB.NET-Quellcode

    1. Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Me.Text = Form1.GetTextBoxString1
    3. End Sub

    VB.NET-Quellcode

    1. Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Me.Text = Form2.GetTextBoxString2
    3. End Sub

    Drahuverar schrieb:

    eigentlich
    nicht.
    Gugst Du hier.
    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!
    Na, aber deine "aufgerufenen" Formen kennen doch Form1 bzw. Form2 garnicht.
    Das ist ja nur die Klasse und nicht das Objekt?!
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Form1, Form2 und Form3 sind keine Objekte sondern Klassen. In VB ist es leider möglich diese direkt anzusprechen was aber eigentlich gar nicht gehen sollte (in C# funktioniert dies nicht).
    Wenn du Daten von einer Form in die andere übertragen willst, ginge dies zB über den Konstruktor der jeweiligen Form.

    VB.NET-Quellcode

    1. Public Class Form2
    2. Private _frm as Form1
    3. Public Sub New(byval frm as Form1)
    4. InitializeComponents()
    5. _frm = frm
    6. ENd Sub
    7. ' Anschließend auf _frm zugreifen
    8. ENd Class


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Ich hab mir das ganze mal angeschaut und den Grund gefunden warum die Felder leer bleiben. In Form 2 sowie in Form 3 rufst du die Funktion so auf:

    VB.NET-Quellcode

    1. 'Form2
    2. Me.Text = Form1.GetTextBoxString
    3. 'Form3
    4. Me.Text = Form2.GetTextBoxString2


    Richtig wäre es aber statt Me.Text die TextBox zu nehmen die auf der Form ist:

    VB.NET-Quellcode

    1. TextBox1.text = Form1.GetTextBoxString
    2. 'Form3
    3. TextBox1.Text = Form2.GetTextBoxString2


    Kleines Edit du könntest auch ein Modul erstellen (in dein Projekt) und folgende funktion benutzen:

    VB.NET-Quellcode

    1. Public Function getTextString(e As Control) As String
    2. Return e.Text
    3. End Function


    Aufrufen kannst du die Funktion dann so:

    VB.NET-Quellcode

    1. 'Form2
    2. ​TextBox1.Text = getTextString(Form1.TextBox1)
    3. 'Form3
    4. TextBox1.Text = getTextString(Form2.TextBox1)


    Btw starte mal das Programm bevor du es abänderst und achte mal auf den Titel von Form 2 und Form 3. Diese verändern sich dank (Me.Text).

    Hoffe ich konnte dir helfen.
    Mfg.
    Conway's Game Of Life Monogame Sample: 80%

    Conway's Game Of Life Monogame Sample

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

    Ich hab leider den Link nicht, [InlineEdit: @RodFromGermany hats gepostet] . Was du machst, ist korrekt in Form1 die Form2 zu instanzieren und aufzurufen, dann jedoch greifst du falsch auf eine Instanzmethode von Form1 zu. Dabei kann nichts rauskommen. Du könntest z.B. für Form2 einen extra Konstruktor definieren, dem du Form 1 übergibst. So kannst du dann von Form 2 aus auf NICHT shared Methoden von Form 1 zugreifen.
    Also...

    VB.NET-Quellcode

    1. Using frm As New Form2
    2. frm.ShowDialog(Me)
    3. End Using

    und

    VB.NET-Quellcode

    1. ​Me.Text = DirectCast(Me.Owner, Form1).GetTextBoxString1

    sollte mehr Sinn machen.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    TheTrust3343 schrieb:

    Hoffe ich konnte dir helfen.
    Nein, das war nicht hilfreich.
    @Drahuverar Du musst den Text als Property von außen auslesen, solange die Instanz als solche noch nicht zerstört wurde.

    VB.NET-Quellcode

    1. Using frm As New Form2
    2. frm.ShowDialog()
    3. Me.MeinText = frm.seinText
    4. End Using

    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!
    @RodFromGermany | @MemoAnMichSelbst | @fichz | @TheTrust3343 | @EaranMaleasi
    Danke euch allen für eure Posts.

    Das nächste mal muss ich einfach mal 'ne kleine Pause einlegen.. Ich fahre mich in meinem denken fest und komme dann nicht mehr weiter :/
    Heute ist einfach nicht mein Tag :|
    Da kann ich nur den hier lassen " X/ "
    Option Strict On!
    So wie ich das Projekt verstanden habe soll es genau andersherum laufen.
    Er möchte von der aufrufenden Form etwas auslesen.
    Also nen Owner mitgeben und diesen dann auslesen.

    @Drahuverar probier mal die zwei Zeilen die ich gepostet habe zu ändern und drück bei deiner Form1 denne mal aufs Knöpfchen, ob das dann passt wie du es meimnst und dann kannst ja gugn ob du es verstehst.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D