Vb08 Textlänge in Label begrenzen
Hallo Forumgemeinde,
ich habe ein kleines Problem, bei der mir keine einfache Lösung einfällt.
Ich habe mir ein Benutzersteuerelement erstellt, welches ein Label und Pictureboxen zur Anzeige enthält. Diese erstelle ich automatisch zu Laufzeit in einem Panel. Nun ist es möglich die Größe des Panels zu ändern. Momentan funktioniert das so, dass sobald das Steuerelement größer als das Panel ist, eine Scrollbar erscheint und der Nutzer sich das dann durch scrollen alles anschauen kann.
Ich würde aber gerne das Steuerelemet bis zu einer bestimmten Minimalgröße mit "schrumpfen" lassen (nur in der Breite, meistens ist der Text im LAbel nur 10 Zeichen breit, gelegentlich um einiges mehr). Aus anderen Programmen kenne ich es, das der Text dann abgeschnitten und ein "[...]" eingefügt wird. Die Größenänderung ist für mich kein Problem, nur das Text abschneiden. Da ja nicht jeder Buchstabe gleich breit ist, kann man das weder schön rechnen, noch statisch von einer bestimmten Anzahl ausgehen, da das echt S** aussieht.
Gibt es eventuell eine fertige Funktion für dieses Problem? Oder muss ich mir jetzt zu jedem Buchstaben die Breite raussuchen und das ganze durchrechnen lassen das es immer Gleich abschneidet. Die Steuerelemente werden übrigens untereinander erstellt und fungieren quasi als einspaltige tabellarische Übersicht.
Mit freundlichsten Grüßen
ich habe ein kleines Problem, bei der mir keine einfache Lösung einfällt.
Ich habe mir ein Benutzersteuerelement erstellt, welches ein Label und Pictureboxen zur Anzeige enthält. Diese erstelle ich automatisch zu Laufzeit in einem Panel. Nun ist es möglich die Größe des Panels zu ändern. Momentan funktioniert das so, dass sobald das Steuerelement größer als das Panel ist, eine Scrollbar erscheint und der Nutzer sich das dann durch scrollen alles anschauen kann.
Ich würde aber gerne das Steuerelemet bis zu einer bestimmten Minimalgröße mit "schrumpfen" lassen (nur in der Breite, meistens ist der Text im LAbel nur 10 Zeichen breit, gelegentlich um einiges mehr). Aus anderen Programmen kenne ich es, das der Text dann abgeschnitten und ein "[...]" eingefügt wird. Die Größenänderung ist für mich kein Problem, nur das Text abschneiden. Da ja nicht jeder Buchstabe gleich breit ist, kann man das weder schön rechnen, noch statisch von einer bestimmten Anzahl ausgehen, da das echt S** aussieht.
Gibt es eventuell eine fertige Funktion für dieses Problem? Oder muss ich mir jetzt zu jedem Buchstaben die Breite raussuchen und das ganze durchrechnen lassen das es immer Gleich abschneidet. Die Steuerelemente werden übrigens untereinander erstellt und fungieren quasi als einspaltige tabellarische Übersicht.
Mit freundlichsten Grüßen
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 161137
Url: https://administrator.de/contentid/161137
Ausgedruckt am: 16.11.2024 um 23:11 Uhr
2 Kommentare
Neuester Kommentar
Hallo erik87!
Den Vorschlag, eine nicht-proportionale Schrift zu verwenden, spare ich mir gleich mal ...
Eine passende Funktion kenne ich leider auch nicht, aber als Workaraound fiele mir ein, in einem unsichtbaren weiteren Label (im Beispiel "Dummy") per Schleife solange verschiedene String-Längen zu testen, bis die (automatische) Breite ("Width") den Vorgabewert überschreitet - also etwa:
Die Länge von "..." müsste bei der Vorgabe von "Breite" entsprechend einkalkuliert werden.
Grüße
bastla
Den Vorschlag, eine nicht-proportionale Schrift zu verwenden, spare ich mir gleich mal ...
Eine passende Funktion kenne ich leider auch nicht, aber als Workaraound fiele mir ein, in einem unsichtbaren weiteren Label (im Beispiel "Dummy") per Schleife solange verschiedene String-Längen zu testen, bis die (automatische) Breite ("Width") den Vorgabewert überschreitet - also etwa:
Dim DerText As String = InputBox("Text eingeben!")
Dim Breite As Integer = 80, i As Integer, ZeichenAnzahl As Integer
ZeichenAnzahl = 1
For i = Len(DerText) To 1 Step -1
Dummy.Text = Mid(DerText, 1, i)
If Dummy.Width <= Breite Then
ZeichenAnzahl = i
Exit For
End If
Next
Label1.Text = Mid(DerText, 1, ZeichenAnzahl) & IIf(ZeichenAnzahl < Len(DerText), "...", "")
Grüße
bastla