如何绘制所选文本

4

我正在编写一个自定义替代文本框/标签控件。它需要提供类似的功能,但在我的应用程序上进行优化并且(希望)更快。它需要能够支持多行文本选择。我想知道是否有一种简单的方法来绘制选定的文本?目前看起来唯一的方法可能是计算应该绘制选择矩形的位置并手动绘制它。我希望能够获得关于完成这个任务或任何其他替代方法的建议。谢谢。


2
没有任何自定义UserControl可以比内置控件更快地完成此任务。如果您在使用文本框和标签时遇到性能问题,那么很可能是因为您在窗体上使用了太多的它们。 - MusiGenesis
我不会说没有办法,只是似乎很难实现,这就是为什么我建议看看其他第三方控件,因为那些以此为基础的公司更有可能找到改进的空间。 - Chris Marisic
2个回答

2

请使用System.Windows.Forms.TextRenderer

只需重写System.Windows.Forms.Control方法:

protected override void OnPaint(PaintEventArgs e)
{
    TextRenderer.DrawText(e.Graphics, Text, Font, new Rectangle(0, 0, Width, Height), ForeColor);
}

public override Size GetPreferredSize(Size proposedSize)
{
    return TextRenderer.MeasureText(Text, Font);
}

当然,如果您需要实现自定义行为,您需要处理更多的事件,例如OnFontChangedOnSizeChanged
如果您要针对这些控件中的特定文本(选定的文本)进行定位,则可以查看此文章。此文章还链接了一个拼写检查库(SharpSpell)的源代码。

0

重写一个应用程序的基本控件是一项重大任务,除非是绝对无法避免的情况,否则不应该进行(在我看来)。如果包含的控件不能满足您的期望,我建议购买第三方控件库,他们的业务是围绕设计和支持这些控件展开的。我使用 Telerik's ASP.NET 控件取得了很多成功,我也看到了许多关于他们其他类型控件的积极评价。

还有许多其他的第三方控件资源可以供您查阅。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接