0

我有一个包含文本的列表框,我被问到是否可以在破折号后证明其内容的合理性。我生成的代码产生了如下内容:

在此处输入图像描述

这适用于破折号左侧的文本小于从列表框中的其他项目中找到的最大长度(即(B20)小于(B15-B19),这是找到的最长条目的情况,所以在破折号前添加一些空格)。

但问题是,如果破折号之前的文本长度相同,它看起来仍然不合理。例子:

在此处输入图像描述

有没有办法真正排列所有的破折号?我想我必须在破折号之前查看字符的实际像素长度而不是长度?

笔记:

  • 我正在使用 ASP.NET 网络表单
  • VB.NET
  • 列表框中每个项目的文本都是一个字符串

现在,我完成您在第一张图片中看到的方法如下:

Public Sub JustifyDisplayName()
        Const ACCOUNT_FOR_DASH As Integer = 4
        Dim maxCharCount As Integer = 0
        Dim whiteSpace As String = HttpUtility.HtmlDecode(" ")

        'Find which one is the longest code
        For Each element As TextEntry In Me
            If element.Value.Length > maxCharCount Then
                maxCharCount = element.Value.Length
            End If
        Next

        'Now, extend the  '-' to the max for all items
        For Each element As TextEntry In Me
            'See how much white space we need to inject
            Dim paddingNeeded As Integer = maxCharCount - element.Value.Length
            Dim tempDisplay As StringBuilder = New StringBuilder(element.Value)

            If paddingNeeded > 0 Then
                tempDisplay.Append(CChar(whiteSpace), paddingNeeded + ACCOUNT_FOR_DASH)
                tempDisplay.Append(" - " & element.Description)
            End If

            tempDisplay.Append(" - " & element.Description)
            element.DrillDownDisplayNameJustified = tempDisplay.ToString()
        Next
End Sub

谢谢。

4

2 回答 2

0

If you could append spaces to short items before the dash so that you always have the same number of characters before the dash, you may consider using Monospaced Fonts, where each character occupies the same width - Ref: Similar Question.

于 2013-11-08T20:58:28.873 回答
0

如果您使用固定宽度的字体,则可以使这一切变得容易得多。除了优秀的 ol' Courier,我相信还有其他的。

如果不这样做,您将无法获得完全正确的宽度。你可以接近,但你不会准确地得到它,因为它们之间的长度差异(H60-H95)可能(I00-I99)不会均匀地分成一个增量 

但是如果你真的想尝试一下,你将不得不使用System.Drawing命名空间、Graphics类和Graphics被调用的方法MeasureString。不过,这只是为了获取所选字体中字符串的长度: System.Drawing不适用于 Web 应用程序。

于 2013-11-08T21:02:15.420 回答