Label.Text aus Modul festlegen

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Dasive.

    Label.Text aus Modul festlegen

    Ich hatte das Problem, das ein Label.Text der aus einem Modul zurückgegeben wird nicht korrekt übernommen wird. ?(
    Der Aufruf wird von MyBase.Load aufgerufen, bevor die Form angezeigt wird.

    Aufrufendes Event:

    VB.NET-Quellcode

    1. Private Sub load_application() Handles MyBase.Load
    2. load_gui()
    3. End Sub


    Aufruf:

    VB.NET-Quellcode

    1. Private Sub load_gui()
    2. lbl_username.Text = m_load_text("&Username", My.Settings.int_login_minimum_username_length, My.Settings.int_login_maximum_username_length)
    3. lbl_password.Text = m_load_text("&Password", My.Settings.int_login_minimum_password_length, My.Settings.int_login_maximum_password_length)
    4. Me.Show()
    5. End Sub


    Funktion:

    VB.NET-Quellcode

    1. Public Function m_load_text(ByVal str_text As String, ByVal int_minumum_length As Integer, ByVal int_maximum_length As Integer)
    2. Return (str_text & " (min: " & int_minumum_length & "/ max: " & int_maximum_length & ") :")
    3. End Function


    Die Settings sollten kein Problem dasrstellen.

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

    Kein Problem, der Editor hier im Forum macht nicht immer das, was man will. :P


    Zu deinem Problem:
    Schreib erstmal gnaz oben in deinem Code "Option Strict On" hin. Über allem anderen.
    Danach wirst du ein paar Fehlermeldungen angezeigt bekommen, die du erstmal fixen solltest.
    Beispielsweise hängst du Zahlen direkt an Strings an, was zwar standardmäßig - i.e. mit Option Strict Off - geht, aber sehr unsauber ist und vermieden werden sollte.
    Konvertiere die Zahl vor dem Dranhängen lieber zuerst mit ToString() in einen String. Also so:

    VB.NET-Quellcode

    1. Return (str_text & " (min: " & int_minumum_length.ToString() & "/ max: " & int_maximum_length.ToString() & ") :")

    Außerdem: Wie sieht denn der Label-Text aus, wenn du das Form siehst?
    Falls er sich nicht vom Default-Wert verändert, denke ich, dass InitializeComponent() nach dem Load-Event ausgelöst wird und die Text-Eigenschaft deiner Labels wieder überschreibt.
    Probiere mal, load_gui() im Show-Event aufzurufen.
    Hab das mit dem "Option Strict On" mal versucht und die erwarteten Fehlermeldungen auch bekommen, bekomme sie mit den ".ToString" aber nicht gefixt.
    Habs auch mit "Option Strict Off" gemacht un er lief fehlerfrei durch, gelöst wurde das Problem aber nicht.



    Die Form sieht wie auf dem Dateianhang aus, die Texte am Anfang sind "&Username" und "&Password".


    Hab mal versucht "load_gui" nach einem Button.Click Event auszuführen, also nach allem Laden & Anzeigen, hat aber nichts gebracht.



    Verdammt fühl ich mich dumm, vielen Dank für die geduldige Hilfe.
    Bilder
    • vb_forum.jpg

      21,21 kB, 479×172, 116 mal angesehen
    Dann zeig mal, wie du's mit Option Strict On versucht hast.
    Das mag dir jetzt ein wenig komisch vorkommen - schließlich geht's auch ohne -, jedoch wird es dir später nützlich sein.

    Zu deinem Problem:
    Ich komm auch nicht dahinter, was da nicht stimmen könnte.
    Es könnte mit dem & am Anfang zusammenhängen, jedoch bezweifle ich das ziemlich...
    Ich werde es mal selbst in einem Projekt versuchen und schauen, ob es bei mir funktioniert.
    Sollte es eigentlich...
    weiteres zu Option Strict: Option Strict On!
    Vorteilhaft ists, sich das von vornherein und allgemeingültig einzurichten (wird dort ja auch erklärt, wies geht)

    wurde schon gesagt: Im Form_Load explizit me.Show aufzurufen bringt höchstens iwelche Abläufe durcheinander. Das Form wird eh angezeigt.

    Zum Problem: Habich garnet verstanden - sieht doch hübsch aus. Was wäre denn die erwünschte Ansicht?
    @haiyyu

    Aufruf von "load_gui":

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class f_login
    3. Private Sub load_application() Handles MyBase.Load
    4. load_gui()
    5. End Sub


    Aufruf der Funktion:

    VB.NET-Quellcode

    1. lbl_username.Text = m_load_text("&Username", My.Settings.int_login_minimum_username_length, My.Settings.int_login_maximum_username_length)
    2. lbl_password.Text = m_load_text("&Password", My.Settings.int_login_minimum_password_length, My.Settings.int_login_maximum_password_length)


    Funktion:

    VB.NET-Quellcode

    1. Public Function m_load_text(ByVal str_text As String, ByVal int_minimum_length As Integer, ByVal int_maximum_length As Integer)
    2. Return (str_text & " (min: " & int_minimum_length.ToString() & "/ max: " & int_maximum_length.ToString() & ") :")
    3. End Function



    Ich schau den Ablauf am Anfang nochmal an...

    ------------------------------------------------------------
    @ErfinderDesRades

    Danke, ich schaus mir mal an.

    Hab eben sehr wenig Erfahrung und richtiges Wissen, fange im Sommer erst meine Lehre an.

    Es sollte das so aussehen das der Label.Text "&Username (min: *ZAHL 1*/ max: *ZAHL 2*) :" ist.
    Dabei werden ZAHL 1 & 2 aus den Settings ausgelesen. Sie stellen die minimale und maximale Anzahl an verlangten Stellen dar.

    ErfinderDesRades schrieb:

    Form_Load explizit me.Show aufzurufen bringt höchstens iwelche Abläufe durcheinander. Das Form wird eh angezeigt.

    Korrekt, sollte aber nicht zum Fehler führen.

    Wie wäre es dagegen aber mit einer klitzekleinen As String Klausel für Deine m_load_text Function ? Funktionen wollen normalerweise eine Definition des Rückgabewertes, und Option Strict wird es bestimmt auch anmeckern.

    Weiterhin ist Deine Function eigentlich nur ein billiger Erstaz für die String.Format Methode ...
    @Kangaroo

    Danke :D

    mit:

    VB.NET-Quellcode

    1. Public Function m_load_text(ByVal str_text As String, ByVal int_minimum_length As Integer, ByVal int_maximum_length As Integer) As String
    2. Return (str_text & " (min: " & int_minimum_length.ToString() & "/ max: " & int_maximum_length.ToString() & ") :")
    3. End Function
    sind die Fehler weg.

    Diese Methode ist mir nicht bekannt, aber ich schau mir sie auch gerne mal an. :)


    ------------------------------
    Sooo, glaub ich hab das Problem entdeckt! Es ist die Zusammensetzung des Return-Strings.
    Hab da mal was umgedreht um sicherzugehen das es das ist:

    VB.NET-Quellcode

    1. Public Function m_load_text(ByVal str_text As String, ByVal int_minimum_length As Integer, ByVal int_maximum_length As Integer) As String
    2. Return (" (min: " & str_text & int_minimum_length.ToString() & "/ max: " & int_maximum_length.ToString() & ") :")
    3. End Function

    Jetz wird nur noch "(min: " zurückgegeben und anzeigt, also muess der "&"-Operator das Problem sein.

    Weis da jemand direkt ne Lösung?

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

    schlechtes Gui-Layout tätich sagn.
    Man sollte immer gucken, dass der User das Form und auch teilbereiche des Forms nach belieben groß und klein-ziehen kann. Ist Basis-Funktionalität, die heutzutage von jeder App verlangt wird, und die problemlos bereitzustellen ist.

    Eine App weist sich auf den ersten Blick sofort als Stümpere aus, wenn sie nichtmal das bereitstellt.

    Dazu gibts mächtige Unterstützung inne Toolbox - gugge LayoutSample

    Dasive schrieb:

    Die Labels waren im Designer zu kurz
    Bei mir haben die Labels defaultmäßig die Einstellung AutoSize = True, das sieht so aus: (Anhang).
    Da muss also schon jemand an diversen Properties geschraubt haben. :S
    Bilder
    • label.jpg

      15,21 kB, 463×199, 94 mal angesehen
    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!