Text in zwei Labeln ohne Lücke nebeneinander

  • VB.NET

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

    Text in zwei Labeln ohne Lücke nebeneinander

    Ich habe zwei Labels nebeneinander (Courier New Standard 10).
    In die Label kommt jeweils eine 8-stellige Zahl.
    Da ist dann eine Lücke zwischen den Zahlen.
    Ist es möglich das die beiden Zahlen ohne Lücke sichtbar sind (wie eine 16-stellige Zahl), oder muss ich das anders lösen?

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

    ErfinderDesRades schrieb:

    ich würds anders lösen: Beide Texte in ein Label schreiben.

    Wäre nur viel Arbeit. Habe das Programm vor 18 Jahren zu 90 % fertig gehabt.
    Jetzt das alte VB6 in VB.Net übernommen.
    Die meisten Probleme sind optische, z. B. ein Label mitten auf einer Linie.
    In VB6 war die ganze Linie sichtbar, solange kein Text in dem Label.
    Bei VB.Net ist die ganze Linie nur sichtbar, wenn Visible=False.

    Elephant schrieb:

    Jetzt das alte VB6 in VB.Net übernommen.
    Dann wäre das ein Teil der Übernahme.
    Zwei Labels nebeneinander zu zirkeln ist nicht unbedingt zielführend, der Aufwand, sie so genau zu platzieren, ist doch etwas größer.
    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 schrieb:

    der Aufwand, sie so genau zu platzieren, ist doch etwas größer.

    Es sind nur zwei Labels, die so angeordnet sein sollen, dass keine Lücke da ist.
    Ausgaben in die Labels sind aber oft in dem Programm.
    Frage mich nur, ob das mit 2 Labeln überhaupt möglich ist.
    Wenn die Höhe vom Label nicht ausreicht um z. B. die Unterlänge eines Buchstaben anzuzeigen, wird der Text trotzdem ausgegeben.
    Seitlich hat ein Label aber an beiden Seiten einen ungenutzten Bereich.
    Wenn man die Breite verkleinert, wird aber nicht der ungenutzte Bereich kleiner, sondern es wird bei der Ausgabe ein Zeichen verschluckt.

    Elephant schrieb:

    In VB6 war die ganze Linie sichtbar, solange kein Text in dem Label.
    Bei VB.Net ist die ganze Linie nur sichtbar, wenn Visible=False.
    Kommt drauf an, wie Du die Linie machst und in welcher Reihenfolge Du die Controls platzierst:

    Die Linie ist hier ein Panel mit der Höhe 1 und einem Rahmen. 123 ist ein Label hinter dem Panel, 456 ist ein Label vor dem Panel.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @Elephant Mach Dir ein kleines Testprojekt, in dem Du das Zusammensetzen zweier Label untersuchst, nix weiter.
    Wenn Du mit Deiner Lösung zufrieden bist, übernimm sie in Dein Projekt.
    Überlege, ob Du Dir ein UserControl machst, dem Du Deine Zahlen übergibst und den Rest macht es allein.
    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 schrieb:

    Mach Dir ein kleines Testprojekt, in dem Du das Zusammensetzen zweier Label untersuchst

    Hatte ich schon gemacht

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. 'anstelle von
    3. Label2.Text = ZahlStr
    4. 'nehme ich
    5. Label1Links(ZahlStr)
    6. End Sub
    7. Sub Label1Links(ByRef ZahlText As String)
    8. Label1.Text = ZahlText & Label1.Text
    9. End Sub

    So könnte ich bei Suchen und Ersetzen
    bei Suchen nach: Label2.Text =
    bei Ersetzen durch: Label1Links(
    eintragen und müsste nur noch die Klammer am Ende eingeben.
    Oder gibt es eine bessere Lösung?

    Elephant schrieb:

    Hatte ich schon gemacht
    Ich hätte jetzt so was erwartet:

    VB.NET-Quellcode

    1. Label1.Text = text1
    2. Label2.Text = text2
    3. Label2.Location.X = Label1.Location.X + Label1.Width
    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!

    VaporiZed schrieb:

    Kommt drauf an, wie Du die Linie machst und in welcher Reihenfolge Du die Controls platzierst:

    Stimmt.
    Man muss aber beachten, dass AutoSize auf True steht. Bei False hat man eine Lücke in der Linie, auch wenn Label kein Inhalt hat.

    RodFromGermany schrieb:

    Ich hätte jetzt so was erwartet:

    Mal abgesehen davon das er Label1.Location.X = nicht akzeptiert
    soll es wohl so sein das er Label1 rechts von Label2 positioniert.
    Bei mir soll es aber so sein, dass er Label1 rechts anzeigt und später Label2 links neben Label1,
    sodass man am Ende eine Zahl sieht, mit dem niedriger wertigen Teil rechts und dem höherwertigen links.

    Elephant schrieb:

    Mal abgesehen davon das er Label1.Location.X = nicht akzeptiert
    So was nenne ich C&P-Bremse.
    Nach 194 Posts im Forum brauchst Du wie lange, dieses Snippet lauffähig zu machen?
    Welches Label rechts und welches Label links steht ist doch völlig egal, nennen wir sie LabelA und LabelB.
    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 schrieb:

    Nach 194 Posts im Forum brauchst Du wie lange, dieses Snippet lauffähig zu machen?

    Geht doch nicht nur um mich. Ich suche ja erstmal im Netz, bevor ich hier etwas schreibe und bekomme dann oft Vorschläge aus diesem Forum.
    Wenn da dann jemand das liest, der noch nicht 194 Posts hier hatte, ist es schöner, wenn es funzt.

    RodFromGermany schrieb:

    Welches Label rechts und welches Label links steht ist doch völlig egal,

    In diesem Fall aber nicht. Stell dir vor, du würdest ein Programm schreiben, wo man Zahl für Zahl sieht, wie man schriftlich rechnet. Da würde man auch nicht anfangen, mit Pausen bei jedem Schritt die Zahlen von links nach rechts erscheinen zu lassen.
    So ähnlich ist das in meinem Fall. Wenn ich jetzt links rechts in deinem Vorschlag ändere, meine ich könnte ich es nicht so leicht mit suchen/ersetzen in dem Programm ändern wie bei meinem Vorschlag.

    Danke dafür das du dich mit meinem Problem beschäftigst.

    Elephant schrieb:

    Stell dir vor, du würdest ein Programm schreiben, wo man Zahl für Zahl sieht, wie man schriftlich rechnet
    OK.
    Schreib eine vollständige und belastbare Aufgabenstellung bzw. Problembeschreibung.
    Eines ist gewiss:
    Wenn Du Dein .NET-Programm neu schreibst, bist Du schneller und besser als wenn Du es von VB6 überträgst.
    Und:
    Wozu brauchst Du Label?
    Nimm eine (Rich)TextBox
    oder
    male es selbst im Paint-Event der Form.
    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!

    Elephant schrieb:

    Man muss aber beachten, dass AutoSize auf True steht. Bei False hat man eine Lücke in der Linie, auch wenn Label kein Inhalt hat.
    Hmnee …
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Hmnee …

    Ich habe jetzt Label1 angelegt, dann ein Panel mit der Höhe 4 darüber, dann Label2 und Label3 auf dem Panel.
    Beim Start geht die Linie über Label1, bei Label2 und Label3 ist eine Lücke mit dem Text.
    Bei Button1 bleibt die Lücke in der Linie bei Label2, bei Label3 ist sie weg.
    Bei Button2 sind beide Lücken mit dem Text wieder da

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. Panel1.BackColor = Color.Red
    4. Label2.AutoSize = False
    5. Label3.AutoSize = True
    6. Label2.Text = "Label1"
    7. Label2.Text = "AS False"
    8. Label3.Text = "AS True"
    9. End Sub
    10. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    11. Label2.Text = Nothing
    12. Label3.Text = Nothing
    13. End Sub
    14. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    15. Label2.Text = "AS False"
    16. Label3.Text = "AS True"
    17. End Sub
    18. End Class

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

    Elephant schrieb:

    Bei Button2 sind beide Lücken mit dem Text wieder da
    Was war mit .Location?
    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!
    @Elephant: Kannst Du ein Bild hochladen? Ich kann mir grad nix unter der Istsituation vorstellen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    :S Gut zu wissen, dass Du mit .NET 5 oder 6 unterwegs bist und nicht in .NET Framework. Naja, scheint zumindest keine Rolle für das Problem zu spielen. s. Anhang

    Du musst im Designer mit der Control-Reihenfolge arbeiten, um die einzelnen Controls richtig zu platzieren. Das Panel muss ganz vorne sein. Dazu das Panel wählen und den passenden Befehl wählen:
    Bilder
    • Bild.png

      7,65 kB, 775×254, 45 mal angesehen
    • zur Laufzeit.png

      3,49 kB, 797×225, 50 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Das Panel muss ganz vorne sein.

    Da habe ich mich wohl unklar ausgedrückt.
    Wenn das Panel ganz vorne ist, sehe ich immer den Strick, egal ob AutoSize oder nicht und egal ob ein Inhalt im Label ist.
    Ich möchte aber das, wenn ein Text im Label ist, der Strich da unterbrochen ist um den Text besser lesen zu können und wenn kein Text im Label ist, der Strich ohne Unterbrechung angezeigt wird.
    Das habe ich ja auch schon hinbekommen, entweder mit Label.Visibel oder Label.AutoSize und Label vor dem Panel.
    Soll halt visualisieren, wie sich Daten von einem Punkt zum anderen bewegen (ohne aufwendige Animation).
    Am Startpunkt stehen die Daten am Ziel ein leeres Kästchen. Dann wird der Weg angezeigt, in dem der Strich sichtbar wird.
    Dann sieht man die Daten an verschiedenen Stellen auf den Strich, sodass man sieht, dass sie sich vom Start zum Ziel bewegen.