gpt4 book ai didi

.net - 在矩形中换行,同时允许截断单词

转载 作者:行者123 更新时间:2023-12-01 12:56:48 26 4
gpt4 key购买 nike

我正在制作一个看起来类似于 Google Calendar、iCalendar、Outlook 日历等的日程安排应用程序...正如您在此类应用程序中看到的那样,计划的事件以矩形表示,这些矩形可能非常小,尤其是如果您正在查看整整一周。

我的挑战是在用户单击之前使用矩形中的文本为用户提供事件的“有意义的摘要”。文本应该非常紧凑。为此,我希望它以一种不太常见的方式换行,但我怀疑 .NET 能够在 native 处理它。

如果单个单词比矩形宽,则只应显示该单词的开头。但是,如果后面的单词部分落在矩形之外,则在遇到空格时仍应发生换行。并非每个空格都会导致换行到下一行,因为如果两个或更多单词恰好适合一行,那很好。

我怀疑答案在于 StringFormat、StringTrimming 和 FormatFlags 的功能,但我还没有找到实现目标的正确组合。

例如,如果我们有...

Chuck Norris
Dentist Appointment

由于篇幅有限,可能会变成...

Chuc
Norr
Denti
Appo

我不希望它变成:

Chuc
k
Norr
is
Dent
ist
Appo
intme
nt

如您在本例中所见,如果用户已经知道查克诺里斯是谁,字母“k”和字母“is”的存在并不能帮助用户识别这个名字。事实上,这些字母的存在可能会迫使“牙医预约”从 View 中隐藏起来,因为垂直空间也很有限。

我已经知道如何在以正常方式环绕的矩形中绘制文本,而且我也知道如何获取它以避免绘制落在矩形之外的任何文本。我不知道的是如何让它在遇到空格(或回车)时换行,同时防止它在单个单词比矩形宽时换行中间单词。有什么帮助吗?

最佳答案

尝试使用带有 TextFormatFlags.WordBreak 标志的 TextRenderer.DrawText 方法:

使用面板绘制事件的示例:

Private Sub Panel1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles Panel1.Paint
Dim sb As New StringBuilder
sb.AppendLine("Chuck Norris")
sb.AppendLine("Dentist Appointment")

e.Graphics.Clear(Color.White)
TextRenderer.DrawText(e.Graphics, sb.ToString, Panel1.Font, _
Panel1.ClientRectangle, Color.Black, Color.Empty, _
TextFormatFlags.WordBreak)
End Sub

您还可以添加 TextFormatFlags.WordEllipsis 以将“...”添加到在矩形边缘被截断的单词的末尾:

TextRenderer.DrawText(e.Graphics, sb.ToString, Panel1.Font, _
Panel1.ClientRectangle, Color.Black, Color.Empty, _
TextFormatFlags.WordBreak Or TextFormatFlags.WordEllipsis)

关于.net - 在矩形中换行,同时允许截断单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9252521/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com