string.Format - 在两列中格式化两个变量

时间:2016-05-13 04:08:36

标签: c# listbox tostring string.format

我正在开发一个应用程序,我需要帮助。 在这个应用程序中,有一个列表框将显示所有用户(类似记分牌)。在用户的方法ToString()中,我设置了string.Format以返回两个变量(Name和Money)。 但是当我运行该应用程序时,我会得到类似这样的输出:

bustercze   147
JohnyPrcina  158
anotherPlayer  47

但我希望输出如下:

bustercze       147
JohnyPrcina     158
anotherPlayer   47

我希望你帮我。你可以帮助我。

我的ToString()代码:

public override string ToString()
    {
        return string.Format("{0}   {1}", Jmeno, Penize);
    }

我已经尝试过: 1. http://www.csharp-examples.net/align-string-with-spaces/(没有帮助) 2. Format a string into columns(也没有帮助)

4 个答案:

答案 0 :(得分:0)

使用以下格式:"{0, -13} {1}"

注意:您可能需要更改13到20或25,具体取决于Jmeno可以获得多长时间。

编辑:如果您在列表框中显示此内容,则需要使用等宽字体:

InitializeComponent()下方或填充数据之前/之后添加此行:

listbox.Font = new Font(FontFamily.GenericMonospace, listbox.Font.Size);

答案 1 :(得分:0)

不要使用ToString()来执行此操作。在WPF列表框中使用这样的模板

    <ListBox ItemsSource="{Binding Scores}" Grid.IsSharedSizeScope="True">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto" SharedSizeGroup="JmenoColumn"/>
                        <ColumnDefinition Width="Auto" SharedSizeGroup="PenizeColumn"/>
                    </Grid.ColumnDefinitions>
                    <TextBlock Grid.Column="0" Margin="0,0,10,0" Text="{Binding Jmeno}"/>
                    <TextBlock Grid.Column="1" Text="{Binding Penize}"/>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

然后你可以得到这个:

enter image description here

旧答案。(地址ToString()问题) 使用PadRight,例如,

string.Format("{0}{1}", Jmeno.PadRight(20), Penize)

代码

int padding = 15;
string Jmeno = "bustercze";
int Penize = 147;
Console.WriteLine(string.Format("{0}{1}", Jmeno.PadRight(padding), Penize));
Jmeno = "JohnyPrcina";
Penize = 158;
Console.WriteLine(string.Format("{0}{1}", Jmeno.PadRight(padding), Penize));
Jmeno = "anotherPlayer";
Penize = 47;
Console.WriteLine(string.Format("{0}{1}", Jmeno.PadRight(padding), Penize));

产生

bustercze      147
JohnyPrcina    158
anotherPlayer  47

答案 2 :(得分:0)

您可以使用advanced featuresstring.Format

string.Format("{0,-13}{1}")

您可以通过撰写str.PadRight(10)

来做同样的事情

答案 3 :(得分:0)

你可以用这种方式格式化字符串,-16在这里定义你想要的左侧对齐空间的数量,如果你想要右侧,那么你可以使用+将它设置为基于最长可能的Jmeno

public override string ToString()
    {
        return string.Format("{0,-16}{1}", Jmeno, Penize);
    }