C# Environment.NewLine 不在 Windows 表单列表框中添加一行

Posted

技术标签:

【中文标题】C# Environment.NewLine 不在 Windows 表单列表框中添加一行【英文标题】:C# Environment.NewLine doesn't add a line in windows form listbox 【发布时间】:2022-01-14 14:17:16 【问题描述】:

我创建了一个在列表框中显示一些信息的 Windows 窗体。 首先,我创建了具有 5 个属性的 UserInfo 类:

    public class RegUnregUser

    public string Company  get; set; 
    public string Email  get; set; 
    public string Role  get; set; 
    public object ID  get; set; 
    public string RegistrationStatus  get; set; 

以及一个返回这些属性的 FullInfo:

public string FullInfo
    
        get
        
            return
                $"Company: Company" +
                "\r\n" +
                $"Email: Email" +
                Environment.NewLine +
                $"Role: Role Environment.NewLine ID: Id Environment.NewLine" +
                $"RegistrationStatus: RegistrationStatus";
        
    

如您所见,我尝试了所有可能的组合,但结果总是:

Company: companytest1Email: emailtest1 ..

我该怎么做才能像这样显示这些信息:

Company: companytest1
Email: emailtest1
..

Form1 中的代码。有一个用户搜索电子邮件的文本框,当他们单击搜索按钮时,数据库上有一个查询,该查询在表中搜索此电子邮件并返回结果。我知道这是一个简单的 sql 注入,但我将是唯一使用此代码的人

    public partial class Dashboard : Form

    List<RegUnregUser> regUnregUsers = new List<RegUnregUser>();
    public Dashboard()
    
        InitializeComponent();
        RegUnregUsersListBox.DataSource = regUnregUsers;
        RegUnregUsersListBox.DisplayMember = "FullInfo";
    
       
    private void RegUnregSearchButton_Click(object sender, EventArgs e)
    
        DataAccess db = new DataAccess();

        regUnregUsers = db.GetRegUnregUsers(EmailTextBox.Text);

        RegUnregUsersListBox.DataSource = regUnregUsers;
        RegUnregUsersListBox.DisplayMember = "FullInfo";
    
 

提前感谢您的帮助

【问题讨论】:

这能回答你的问题吗? How to put a \n(new line) inside a list box? 你能显示将你的项目绑定到列表框项目源的代码吗? 我刚刚编辑了我的问题并添加了表单代码(仪表板) 现在我希望一切都清楚了 目前还不清楚总体目标是什么。但是,ListBox 包含列表格式的“项目”,因此“每一”行是一个 (1) 项目。很明显ListBox 本身是“忽略”或删除换行符。如果您必须为ListBox 中的每个属性设置此新行,那么您需要将RegUnregUser 的每个属性设置为ListBox 中的“单个项目”,我敢打赌这不会起作用,因为每个人RegUnregUser 对象将被拆分为列表框中的多个“项目”。您是否考虑过使用其他控件? 【参考方案1】:

我该怎么做才能像这样显示这些信息

简单的答案?你不能*

列表框的设计不是为每个项目包含多行文本,而且看起来您希望查询返回多个用户,因此建议副本中的建议(在我看来)相当糟糕,因为它们本质上是在列表框中创建多个项目,每行一个文本。如果您返回了 50 个用户和 5 个属性,那么它就是一个 250 个项目的列表框。非常原始:/

考虑改用 DataGridView:

public partial class Dashboard : Form

    public Dashboard()
    
        InitializeComponent();
    
       
    private void RegUnregSearchButton_Click(object sender, EventArgs e)
    
        DataAccess db = new DataAccess();

        RegUnregUsersListBox.DataSource = db.GetRegUnregUsers(EmailTextBox.Text);
    
 

当然,您需要接受 RegUnregUser 的属性在每列中分布一个,但我保证,这样会更好:)

* can't 当然,难以置信地不可能是绝对真理。我敢肯定,如果你想花几个小时写一个你自己画的东西,你会管理它

【讨论】:

以上是关于C# Environment.NewLine 不在 Windows 表单列表框中添加一行的主要内容,如果未能解决你的问题,请参考以下文章

RichTextBox_logs.AppendText(Environment.NewLine);返回两条新线?

是否有理由在iOS或Android移动设备的XF代码中使用Environment.NewLine而不是 n?

Replace(Environment.NewLine, "<br/>") 在网页上显示文本时未按预期工作

C#:我希望单词的每个字母都以新行开头

如何在c#中从html中解析出文本

C# 中richitextBoX中显示的文本怎么换行