2 回答

TA贡献1789条经验 获得超8个赞
正如我们已经告诉您的,当您希望输出在列中“对齐”时, ListBox并不是真正正确的控件。ListBox 中没有规定将单行文本格式化为列。ListView和DataGridView之类的控件更适合此任务,因为它们具有列的概念,并且您可以以自然的方式使用它们。
但是,如果您确实想使用 ListBox 并拥有列,那么您需要做出妥协。您不能使用宽度可变的字体,因为在这些字体中,字母 W 和空格的宽度不同,这会导致计算正确的列大小变得混乱(而且我们甚至没有开始讨论如何计算所需的空格)与不同的文本进行正确的左/右对齐)。
折衷方案需要使用固定宽度字体(或等宽字体或固定间距字体)。有很多可供选择。(Consolas是我的最爱)。将列表框的 Font 属性设置为您选择的固定宽度字体后,您需要决定如何调整列的大小。
在下面的示例中,我决定名字列包含 20 个字符,姓氏列包含 30 个字符,投票列各包含 8 个字符。
因此,您对 ToString 方法的重写将是:
public override string ToString()
{
return $"{_firstName,-20} {_lastName,-30} " +
"{_exam1,8} {_exam2,8} {_exam3,8} {_finalExam,8}";
}
变量名称后面的那些正数和负数是对齐值,如格式字符串组件中所述(注意,这是一个很大的主题,但值得阅读和理解)

TA贡献1887条经验 获得超5个赞
标准 ListBox 控件不是为这样的格式而设计的,它基本上只是文本 - 并且它不知道如何将字符串的内容与标签对齐,也不应该!
相反,您需要一个适合这项工作的控件。它称为DataGridView。如果您搜索,网上有很多教程可以向您展示如何使用它。
- 2 回答
- 0 关注
- 125 浏览
添加回答
举报