【问题标题】:Can a background image be set on a Winforms TextBox?可以在 Winforms TextBox 上设置背景图像吗?
【发布时间】:2010-12-05 18:04:02
【问题描述】:

是否可以在 C# 中更改 Windows 窗体 TextBox 的背景图像?没有BackgroundImage 属性。我应该以某种方式覆盖Paint 方法吗?

【问题讨论】:

  • WinForms,帖子已更新,谢谢

标签: c# winforms textbox background-image


【解决方案1】:

这是不可能的。如果您尝试重写 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更强大的控件。
【解决方案2】:

如果您需要一些原生编码,您可以尝试使用此处提到的技术:http://www.codedblog.com/2007/09/17/owner-drawing-a-windowsforms-textbox (编辑:原始链接已关闭,thnx Zyo,将其替换为返回机器中存档副本的链接。)

虽然这篇文章是关于在文本框之后绘制文本框(而不是之前),但也许可以对其进行修改以完成您需要的内容。

【讨论】:

    猜你喜欢
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 2017-07-31
    • 2011-11-11
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    相关资源
    最近更新 更多