为了账号安全,请及时绑定邮箱和手机立即绑定

读取列表框中列内的文件

读取列表框中列内的文件

C#
喵喔喔 2023-07-09 09:49:58
我正在尝试读取 csv 文件,以便以行的形式获取并显示在列表框中,但我无法排列固定列以使其处于可读形式。我尝试过使用多列属性,但仍然没有运气。我期望输出是这样的:编辑 :这是我填充列表框的代码foreach (Student person in _result)            {                _listResults.Items.Add(person.ToString());            }这是 bean 类:    class Student{    #region FIELDS    private String _lastName, _firstName;    private int _exam1, _exam2, _exam3, _finalExam;    public string LastName    {        get        {            return _lastName;        }        set        {            _lastName = value;        }    }    public string FirstName    {        get        {            return _firstName;        }        set        {            _firstName = value;        }    }    public int Exam1    {        get        {            return _exam1;        }        set        {            _exam1 = value;        }    }    public int Exam2    {        get        {            return _exam2;        }        set        {            _exam2 = value;        }    }    public int Exam3    {        get        {            return _exam3;        }        set        {            _exam3 = value;        }    }    public int FinalExam    {        get        {            return _finalExam;        }        set        {            _finalExam = value;        }    }    #endregion    #region CONSTRUCTOR    public Student()    {    }    public Student(string firstName, string lastName, int exam1, int exam2, int exam3, int final)    {        this._firstName = firstName;        this._lastName = lastName;        this._exam1 = exam1;        this._exam2 = exam2;        this._exam3 = exam3;        this._finalExam = final;    }    #endregion    #region METHODS    public void _CalculateAverage(out float average)    {        average = _exam1 + _exam2 + _exam3 + _finalExam / 400;    }
查看完整描述

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}";

}

变量名称后面的那些正数和负数是对齐值,如格式字符串组件中所述(注意,这是一个很大的主题,但值得阅读和理解)



查看完整回答
反对 回复 2023-07-09
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

标准 ListBox 控件不是为这样的格式而设计的,它基本上只是文本 - 并且它不知道如何将字符串的内容与标签对齐,也不应该!

相反,您需要一个适合这项工作的控件。它称为DataGridView。如果您搜索,网上有很多教程可以向您展示如何使用它。

查看完整回答
反对 回复 2023-07-09
  • 2 回答
  • 0 关注
  • 81 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信