【问题标题】:How can I align strings added as listbox items?如何对齐作为列表框项目添加的字符串?
【发布时间】:2013-04-29 01:30:42
【问题描述】:

我有一个列表框,我想在其中显示一个字符类的名称和高分列表。我使用ListBox.Items.Add 为每个字符添加以下字符串:

public String stringHighscore()
    {
        return name + "\t\t\t" + score.ToString();
    }

问题是当名字超过一定长度时,分数会被推到右边。列表框如下所示(抱歉,我的代表还不允许我发布图片):

(Link to the listbox image on tinypic)

我认为这可能是由于“\t”,但我不确定。我该如何解决这个问题并正确对齐分数?如果我使用两个列表框,一个用于名称,一个用于分数,会更好吗?

【问题讨论】:

  • 是的,一直填充。
  • 考虑一个List View - 让您命名列(想想资源管理器),这听起来更适合在列表视图中手动对齐字符串(或使用 2 个列表框)(您需要设置View 属性到详细信息)

标签: c# string listbox


【解决方案1】:

你可以使用String.PadRight方法。

返回一个新字符串,该字符串左对齐该字符串中的字符 在右侧用空格填充它们,达到指定的总长度。

假设name 的最大长度为 20 个字符

public String stringHighscore()
{
     return name + name.PadRight(20 - name.Length) + "\t\t\t" + score.ToString();
}

如果您的姓名长度为13,这将添加7 空格字符。这样一来,您全名的长度最终将等于 (20)。

【讨论】:

  • 太棒了!布罗斯基
【解决方案2】:

看看这篇 csharp-examples 文章:

Align String with Spaces.

官方参考,看Composite Formatting

祝你好运!

【讨论】:

  • 不适用于列表框
【解决方案3】:

在我看来,您最好使用ListView,而不是尝试自己手动对齐任何东西。使用起来比使用简单的列表框更难,而且所有配置都可以在 IDE 中完成(我假设您使用的是 VisualStudio,或类似强大的 IDE)。

假设您有一个名为 scoresListView 的 ListView 项目。在 IDE 中,您可以将 View 属性设置为 Details,这将导致列表以给定宽度的列呈现,顶部有一个标题(我认为您需要“Name”和“Score”)。添加列的代码如下所示(为了便于阅读,我假设您的 C# 文件顶部有一个 using System.Windows.Forms 子句):

scoresListView.Columns.Add("Name", 200); // add the Names column of width 200 pixels
scoresListView.Columns.Add("Score", 200, HorizontalAlignment.Right); // add the Score column of width 200 pixels (Right Aligned for the sake of demonstration)

将项目(名称/分数对)添加到列表视图可以很简单:

string myName = "abcdef"; // sample data
int myScore = 450;
scoresListView.Items.Add(new ListViewItem(new string[] { myName, myScore.ToString() } )); // add a record to the ListView

抱歉,没有太多解释,希望这对现在或将来有所帮助 - ListView 是一个非常有用的控件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2013-12-23
    • 2021-07-14
    • 2018-05-16
    • 1970-01-01
    相关资源
    最近更新 更多