我正在开发一个应用程序,我需要帮助。 在这个应用程序中,有一个列表框将显示所有用户(类似记分牌)。在用户的方法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(也没有帮助)
答案 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>
然后你可以得到这个:
旧答案。(地址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)
答案 3 :(得分:0)
你可以用这种方式格式化字符串,-16
在这里定义你想要的左侧对齐空间的数量,如果你想要右侧,那么你可以使用+
将它设置为基于最长可能的Jmeno
public override string ToString()
{
return string.Format("{0,-16}{1}", Jmeno, Penize);
}