【发布时间】:2010-12-05 18:04:02
【问题描述】:
是否可以在 C# 中更改 Windows 窗体 TextBox 的背景图像?没有BackgroundImage 属性。我应该以某种方式覆盖Paint 方法吗?
【问题讨论】:
-
WinForms,帖子已更新,谢谢
标签: c# winforms textbox background-image
是否可以在 C# 中更改 Windows 窗体 TextBox 的背景图像?没有BackgroundImage 属性。我应该以某种方式覆盖Paint 方法吗?
【问题讨论】:
标签: c# winforms textbox background-image
这是不可能的。如果您尝试重写 TextBox 并在构造函数中调用 SetStyle(ControlStyles.UserPaint, true) 以便您可以重写 OnPaintBackground 并绘制图像,那么您会遇到一些粗鲁的惊喜。回退到旧版渲染模式只是其中之一。
TextBox 可以追溯到 Windows 的早期,那时它还必须在 386SUX 硬件上运行。它在这种有限的硬件上合理工作所犯的一项特殊罪行是在不使用 WM_PAINT 事件的情况下绘制自己。这会破坏背景图像。
CodeProject.com 上有一个项目提供了一个。我不能推荐它。
【讨论】:
UserControl。在上面放一个透明的RichTextBox。要生成透明的RichTextBox,请复制Hans Passant's Code,但继承自RichTextBox 而不是Label。请注意,从TextBox 继承不适用于此技巧。您也许可以以比这更简洁的方式为RichTextBox 提供背景图像;比TextBox更强大的控件。
如果您需要一些原生编码,您可以尝试使用此处提到的技术:http://www.codedblog.com/2007/09/17/owner-drawing-a-windowsforms-textbox
(编辑:原始链接已关闭,thnx Zyo,将其替换为返回机器中存档副本的链接。)
虽然这篇文章是关于在文本框之后绘制文本框(而不是之前),但也许可以对其进行修改以完成您需要的内容。
【讨论】: