Rechtsbündiges Label in Menu ToolStrip mit rechtsbündigem Text in max. Grösse des Freiraums zw. letztem Menu und rechtem Rand

    • VB.NET
    • .NET (FX) 4.5–4.8

      Rechtsbündiges Label in Menu ToolStrip mit rechtsbündigem Text in max. Grösse des Freiraums zw. letztem Menu und rechtem Rand

      Falls jemand mal diese Funktion braucht, ein Label rechtsbündig in der Menu Toolstrip Bar, das maximal den verfügbaren Platz zwischen letztem Menu-Eintrag und rechten Rand des Menu-Toolstrip ausfüllt und den Text rechsbündig im Label am rechten Rand des ToolStrips anzeigt. Wenn der Text breiter als der verfügbare Platz ist, wird der Text gekürzt und mit "..." ergänzt:

      VB.NET-Quellcode

      1. ' in Deklaration
      2. Dim mnu_Mainform_label As New ToolStripLabel()
      3. Dim LabelText As String
      4. ' Im Load-Handler
      5. ' Label in Menu ToolStrip
      6. mnu_Mainform_label.Padding = New Padding(0, 0, 5, 0)
      7. mnu_Mainform_label.Alignment = ToolStripItemAlignment.Right
      8. mnu_Mainform_label.TextAlign = System.Drawing.ContentAlignment.MiddleRight
      9. mnu_Mainform_label.AutoSize = True
      10. mnu_MainForm.Items.Add(mnu_Mainform_label)
      11. ' im Mainform-SizeChanged
      12. Private Sub StateChangedForm_SizeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.SizeChanged
      13. LabelInMenuToolStripSetzenUndAnpassen()
      14. End Sub
      15. ' Text in Label schreiben und Label anpassen
      16. Private Sub TextInLabelSchreiben()
      17. LabelText = "Mein Text"
      18. LabelInMenuToolStripSetzenUndAnpassen()
      19. End Sub
      20. ' SubText-Ausgabe und Breitenanpassung des Labels
      21. Private Sub LabelInMenuToolStripSetzenUndAnpassen()
      22. If LabelText IsNot Nothing Then
      23. mnu_Mainform_label.Text = LabelText
      24. ' Maximal verfügbare Breite
      25. Dim menuWidth As Integer = mnu_MainForm.Items.OfType(Of ToolStripMenuItem)().Sum(Function(item) item.Width)
      26. Dim availableWidth As Integer = mnu_MainForm.Width - menuWidth
      27. If availableWidth < 0 Then availableWidth = 0
      28. ' Setzen der Breite des Labels
      29. ' Text kürzen, wenn er nicht passt
      30. Dim displayText As String = LabelText
      31. Do While TextRenderer.MeasureText(displayText & "...", mnu_Mainform_label.Font).Width > availableWidth - 20 AndAlso displayText.Length > 0
      32. displayText = displayText.Substring(0, displayText.Length - 1)
      33. Loop
      34. If LabelText <> displayText Then
      35. displayText &= "..."
      36. End If
      37. mnu_Mainform_label.Text = displayText
      38. End If
      39. End Sub


      Das funktioniert bei mir einwandfrei.
      Bilder
      • LabelInMenuBar.jpg

        23,94 kB, 1.290×74, 10 mal angesehen
      • LabelInMenuBar1.jpg

        12,03 kB, 535×74, 5 mal angesehen

      Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „Dideldum“ ()