C# WinForm如何在RichTextBox中正确显示书籍列表信息
解决C# WinForm RichTextBox显示书籍信息的问题
问题原因
你当前代码调用library.GetAllBooks().ToString()显示命名空间,核心原因是:
- 若
GetAllBooks()返回集合(比如List<Book>),集合默认的ToString()只会输出自身类名(例如System.Collections.Generic.List1[YourNamespace.Book]`); Book类默认继承自Object,其ToString()默认输出类的完全限定名(命名空间+类名),不会展示自定义字段。
两种可行实现方案
方案1:重写Book类的ToString()方法
在Book类中重写ToString(),自定义书籍信息的输出格式,后续遍历集合时可直接调用:
public class Book { public string Title { get; set; } public string Author { get; set; } // 重写ToString,自定义单本书的信息格式 public override string ToString() { return $"《{Title}》 - 作者:{Author}"; } }
然后在WinForm代码中拼接所有书籍信息:
var allBooks = library.GetAllBooks(); // 用换行符分隔每本书的信息 richTextBox1.Text = string.Join(Environment.NewLine, allBooks);
方案2:直接遍历集合拼接字段
如果不想修改Book类,可直接遍历书籍集合,手动拼接标题和作者字段:
var allBooks = library.GetAllBooks(); var contentBuilder = new System.Text.StringBuilder(); foreach (var book in allBooks) { // 自定义每行的显示格式 contentBuilder.AppendLine($"标题:{book.Title},作者:{book.Author}"); } richTextBox1.Text = contentBuilder.ToString();
进阶:设置RichTextBox文本样式
若需要更复杂的显示效果(比如加粗标题),可利用RichTextBox的选择样式属性:
foreach (var book in allBooks) { // 设置标题为加粗样式 richTextBox1.SelectionFont = new Font(richTextBox1.Font, FontStyle.Bold); richTextBox1.AppendText($"《{book.Title}》"); // 恢复默认字体显示作者信息 richTextBox1.SelectionFont = richTextBox1.Font; richTextBox1.AppendLine($" - {book.Author}"); }
内容的提问来源于stack exchange,提问作者Frank Christiansen
相关产品推荐
相关产品推荐

