Winforms文本框能否设置背景图片?

21

在C#中,是否可以更改Windows Forms TextBox的背景图像?因为它没有BackgroundImage属性。我应该以某种方式重写Paint方法吗?


WinForms,帖子已更新,谢谢。 - Jan Turoň
2个回答

36

这是不可能的。如果您尝试通过覆盖TextBox并在构造函数中调用SetStyle(ControlStyles.UserPaint, true)以便覆盖OnPaintBackground并绘制图像,则会遇到几个问题。其中之一就是退回到传统呈现模式。

TextBox来自Windows非常早期的时代,那时它仍然必须在386SUX硬件上运行。为了在如此有限的硬件上合理工作,它所犯的一个特定的错误是在不使用WM_PAINT事件的情况下绘制自己。这会破坏背景图像。

CodeProject.com有一个提供此功能的项目,但我不能推荐它。


谢谢您的简短而信息量丰富的回答。您知道一些解决方法吗,例如透明背景? - Jan Turoň
5
解决方法:创建一个带有背景图片的UserControl,在其上方放置一个透明的RichTextBox。要实现透明的RichTextBox,请复制Hans Passant的代码,但继承自RichTextBox而不是Label。请注意,继承自TextBox将无法使用此技巧。可能有比这更简洁的方式为RichTextBox添加背景图片;它是比TextBox更强大的控件。 - Brian

2
如果您想进行本地编码,可以尝试使用此处提到的技术:http://www.codedblog.com/2007/09/17/owner-drawing-a-windowsforms-textbox(注:原链接已失效,感谢Zyo的提醒,替换为在wayback机器上存档的链接)。
虽然这篇文章是关于在文本框绘制之后绘制某些内容(而不是之前),但也许可以修改以实现您的需求。

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