Vb.net 如何向菜单项文本添加省略号

Vb.net 如何向菜单项文本添加省略号,vb.net,text,menuitem,ellipsis,menustrip,Vb.net,Text,Menuitem,Ellipsis,Menustrip,使用MenuStrip时,最好使项和子项具有一定的宽度,并且该宽度不应改变。假设宽度确实变长,而不是改变菜单项的整体大小以适应文本,则应该有一种方法仅显示部分文本,例如省略号 之前: 之后 很明显,我编辑了这个MenuStrip MenuItem的文本来说明我的意思。这可能吗?如果是这样的话,我该如何实现这一点?我猜一个条目是在运行时动态添加/更新的?否则,如果您不介意将原始文本保存到其他地方(例如,在Tag属性中),您已经有了解决方案,您可以创建一个递归函数来查找文本长度大于某个定义值的所

使用MenuStrip时,最好使项和子项具有一定的宽度,并且该宽度不应改变。假设宽度确实变长,而不是改变菜单项的整体大小以适应文本,则应该有一种方法仅显示部分文本,例如省略号

之前:

之后


很明显,我编辑了这个MenuStrip MenuItem的文本来说明我的意思。这可能吗?如果是这样的话,我该如何实现这一点?

我猜一个条目是在运行时动态添加/更新的?否则,如果您不介意将原始文本保存到其他地方(例如,在Tag属性中),您已经有了解决方案,您可以创建一个递归函数来查找文本长度大于某个定义值的所有项,并适当地缩写这些项。如果您想要一个恒定长度,则在运行时动态添加项,然后只追加
。请确保使用长字符串作为工具提示或其他内容,但您不希望有少数文件名条目只显示
C:\Windows…
!这是我最初的计划,但我使用菜单项文本启动程序,因为菜单项用于存储文件路径。我直接从菜单项获取完整路径。如果我使用子字符串,它将不包含完整路径。我如何解决这个问题?谢谢@SSS。完成任务
Public Class Form1

  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim strPrograms(1, 4) '(0,*) = EXE name; (1,*) = screen name; (*,n) = Program Index

    strPrograms(0, 0) = "ONE.EXE" : strPrograms(1, 0) = "First"
    strPrograms(0, 1) = "TWO.EXE" : strPrograms(1, 1) = "Second"
    strPrograms(0, 2) = "THREE.EXE" : strPrograms(1, 2) = "Third program description is too long"
    strPrograms(0, 3) = "FOUR.EXE" : strPrograms(1, 3) = "Fourth"
    strPrograms(0, 4) = "FIVE.EXE" : strPrograms(1, 4) = "Fifth"

    Dim intMaxLength As Integer = 10
    Dim tsmParent As ToolStripMenuItem = MenuStrip1.Items.Add("Programs")
    For i As Integer = 0 To strPrograms.GetUpperBound(1)
      Dim strScreenName As String = strPrograms(1, i)
      If strScreenName.Length > intMaxLength Then
        strScreenName = strScreenName.Substring(0, intMaxLength - 1) & "…"
      End If
      Dim tsm As New ToolStripMenuItem(strScreenName)
      tsm.Tag = strPrograms(0, i)
      AddHandler tsm.Click, AddressOf tsm_Click
      tsmParent.DropDownItems.Add(tsm)
    Next i

  End Sub

  Private Sub tsm_Click(sender As Object, e As EventArgs)
    Dim strEXEName As String = DirectCast(sender, ToolStripMenuItem).Tag
    MsgBox(strEXEName)

  End Sub
End Class