【问题标题】:Richtextbox alternative for Chat application in c# winformsc# winforms 中聊天应用程序的 Richtextbox 替代方案
【发布时间】:2017-03-03 14:49:23
【问题描述】:

我正在开发一个聊天应用程序项目,用户通过 TCP/IP 套接字相互通信,这工作正常。聊天室中的人们可以共享文件、图像,当然还有纯文本。我正在使用 RichTextBox 向客户显示消息和图像。

对 RichTextBox 的观察如下:

  • RichTextBox 可以很好地处理纯文本(非常快速且强大)

  • 当用户粘贴一定数量的图像时,稍后会变得非常缓慢并最终开始崩溃。

所以我的问题是,在这里实现我的目标的更好方法是什么?

  • 可以使用什么控件代替 RichTextBox 来显示消息和图像? (无需编辑,只显示消息)

  • 我读到 WPF 的 Richtextbox 比旧的 WinForms Richtextbox 更好。这在性能方面是否正确?

  • 在我的情况下无法切换到 WPF,而且我知道 Winforms 可以托管 WPF 元素。是否可以从 Winform 主机使用 WPF RichTextBox 编辑器? (添加图片、段落、设置FontColors、FontTypes等。)

【问题讨论】:

  • Devexpress 有一个 RichTextBox 控件。只是一种选择。您可以使用试用版进行检查。 link
  • @Badiparmagi 有没有免费的替代品?谢谢。

标签: c# wpf winforms chat richtextbox


【解决方案1】:

您真的需要在聊天应用程序中完成 RichTextEditing 吗?在我看来,聊天应该由一种字体样式等组成。例如,为什么有人应该将文本布局为中心或某事。我会简单地构建一个容器(用户控件、面板等),您可以在其中为文本/图片添加标签或图片编辑。因此,为每条消息添加标签,并为每张图片添加图片编辑。因此,您可以像 WhatsApp 或其他常见的 Messenger 一样获得从上到下的流程。

如果您真的需要完整的 RichTextEditing 功能,我仍然会将图像与文本部分分开并按上述方式构建。你现在使用许多只读的富文本编辑而不是标签。图片也显示在图片编辑中。

优点是您不会变得庞大而笨拙的富文本编辑器,因为您将图像分开。此外,您将成为一个消息流,显示在从上到下排序的不同框中,其中底部是最新的。例如,这使您有机会仅显示最后 10 条消息。如果用户想查看更多内容,您必须重新加载旧帖子。因此,您总是只显示 10 条(或任何您想要的)消息,这样可以减少内存占用。

如果图像太大或仅允许固定大小,您还可以压缩图像。因此,没有人会使用高分辨率图像减慢您的聊天速度。

如果没有第三方控件,我认为您目前还没有丰富文本的替代方案,您需要所有这些编辑功能。如果您只需要显示格式化的东西,您可以尝试 WebBrowser-Control 并将您的 rtf 转换为 html。但我不知道这是否更轻巧。

提示:确保释放不再需要的 RichTextEdits。

这里有一个link,它描述了如何在 Winforms-Application 中托管 WPF-Control。不要认为这会给您带来任何好处,但是如果您想尝试一下,那就去吧;)。

希望对你有帮助。

【讨论】:

  • 这正是我想听到的!正如你所说,我正在考虑切换到面板、标签和图片框,但我不确定这样做是否正确!对我来说,使用容器、面板操作数据比使用老式的富文本框要容易得多。如果我决定使用容器,性能如何?添加大量标签和图片框后会变慢吗?
  • @Omer 如果您添加大量它们以确保您的应用程序会随着时间的推移而变慢。例如,您应该只阅读最后 10 条消息。例如,如果用户向上滚动或单击“加载旧消息”按钮,您可以阅读这些旧消息并显示它们。所以你的应用程序总是加载最少的数据。
  • 抱歉英语不是我的母语,所以我可能不太清楚。我所说的吨是什么意思,实际上我是 10 到 15 岁。我的错。当前的聊天应用程序已经这样做了,并且只加载最近几天的聊天记录。顺便说一句,我只是尝试在一个面板中添加 40 个图片框,而且效果非常好!再次感谢您。
  • 更新:为了比较两种方法(Richtextbox 与面板)的性能,我创建了一个应用程序并向面板和 Rtb 添加了相同数量的文本和图像。不幸的是,Rtb 比面板方法快得多.关于这个问题还有其他想法吗?
猜你喜欢
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
相关资源
最近更新 更多