Während Laufzeit erstellte Controls

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Während Laufzeit erstellte Controls

    Edit by ErfinderDesRades: (Thema verschoben) Bitte richtiges UnterForum wählen!


    Hallo,
    Hab da ein Problem bzw eher eine Frage

    VB.NET-Quellcode

    1. Dim msgWindow = New Form
    2. Dim msgBoxWrite As New TextBox
    3. Dim msgBoxRead As New TextBox
    4. Dim msgBoxSend As New Button
    5. msgWindow.Controls.Add(msgBoxWrite)
    6. msgWindow.Controls.Add(msgBoxRead)
    7. msgWindow.Controls.Add(msgBoxSend)
    8. AddHandler msgBoxSend.Click, AddressOf sendButton_Click

    Hiermit erstelle ich eine Form mit Button und Textbox ( With events hab ich raus genommen ;) )

    in msgBoxWrite schreibt man einen Text den ich jetzt bei Click auf den Button msgBoxSend in eine Datenbank schreiben möchte.
    Jetzt zu meiner frage wie kann ich den Text der Texbox msgBoxWrite an sendButton_Click übergeben?

    Hier noch sendButton_Click

    VB.NET-Quellcode

    1. Private Sub sendButton_KeyDown(ByVal sender As System.Object, ByVal e As System.EventArgs)
    2. Dim Btn As Button = DirectCast(sender, Button)
    3. MsgBox("Nachricht an " & Btn.Name & " gesendet!")
    4. End Sub


    MfG Saarländer

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

    @saarländer
    Der Text aus der Textbox ist in der Text-Property gespeichert. Kleines Code-Beispiel:

    VB.NET-Quellcode

    1. Dim Nachricht As String = msgBoxWrite.Text

    Wenn dein ClickEvent übrigens nur für einen Button gilt, musst du das sender-Objekt eigentlich gar nicht casten, denn da kommt ja immer der sendButton raus. Also direkt MsgBox("Nachricht an " & sendButton.Name & " gesendet!")
    Noch ein kleiner Tipp: Verwende statt MsgBox MessageBox.Show

    Gruß
    Switcherlapp97

    @Andreas
    EDIT: Wieso casten, wenn auf die Textbox doch schon eindeutig mit dem Namen zugegriffen werden kann?
    RubiksCubeSolver


    Jetzt im Showroom

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

    saarländer schrieb:

    msgBoxWrite an sendButton_Click übergeben
    Hast Du Dein Problem mal mit im Designer erstellten Controls gelöst?
    Wie funktioniert es denn da?
    Sieh Dir mal die Datei Form1.Designer.vb an.
    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!
    wenn ich wie du geschrieben hast deklariere kommt folgender fehler:

    Quellcode

    1. Fehler 1 "msgBoxWrite" wurde nicht deklariert. Auf das Objekt kann aufgrund seiner Schutzstufe möglicherweise nicht zugegriffen werden. C:\Users\*********\documents\visual studio 2010\Projects\*********\Form1.vb 80 35 ****


    das gleiche ist wenn ich den sendButton.Name nehme :/

    und die Msgbox ist nur übergangsweiße damit ich sehe ob was passiert :D (verwende gern unlogische vorgehensweißen :DD )
    Währe zu einfach :D
    Nee weils ein kleiner messenger werden soll für einen clan und da man da mit mehrern gleichzeitig schreiben können soll erstelle ich diese zur laufzeit.

    Möglicherweiße löst sich das Problem auch gleich schon denn mir kam grad die idee für jeden user einfach in einer tabliste nen neuen tab auf der form zu erstellen

    etwas unschön aber für den zweck reichts :D

    eine Lösung für mein Problem währe trozdem ganz gut dann weiß man fürs nächste projekt bescheid :DD

    saarländer schrieb:

    soll erstelle ich diese zur laufzeit.
    Dann mach Dir ein entsprechendes UserControl und füge dies während der Laufzeit hinzu.
    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!
    Du erstellst die Controls vermutlich in einer Methode. Die ganzen Variablen, die du für die Controls erstellst sind somit nur in der Methode aufrufbar und nicht außerhalb (zum Beispiel in einem Event). Deshalb hast du auch keinen Zugriff auf die Controls. Deklariere deshalb die Control-Variablen außerhalb der Methode und weise ihnen innerhalb der Methode die Werte zu (Text des Buttons, etc.)

    Besser wäre es allerdings, wenn du ein eigenes UserControl erstellen würdest, dass von einer Form erbt und passe es so an, wie du es benötigst. Ich würde dir dann empfehlen einen eigenen Konstruktor für die Form zu schreiben in dem du die für die Form relevanten Werte als Argumente angibst (z.B. Button-Text, Form-Text etc.)

    Gruß
    Switcherlapp97
    RubiksCubeSolver


    Jetzt im Showroom

    saarländer schrieb:

    eine Lösung für mein Problem währe trozdem ganz gut dann weiß man fürs nächste projekt bescheid
    Löse deine Daten-Verarbeitungs-Probleme mit Datenverarbeitung - nicht mit Generieren von Controls.
    Etwa mit einem DetailView könntest du sehr komfortabel den jeweiligen User aussuchen, den du anschreiben willst.
    Das ist strukturell mit einem TabControl identisch, nur dass Löschen und Zufügen von Unterhaltungen komplett ohne Code abläuft - via Databinding.

    gugge vier Views-Videos