【问题标题】:Custom look of Textbox文本框的自定义外观
【发布时间】:2011-03-17 06:29:49
【问题描述】:

我需要编写一个与原来的 winforms 文本框完全不同的文本框。事实上我需要一个不同的背景,我怎样才能做到这一点?我尝试使用 SetStyle(ControlStyles.UserPaint, true); 进行所有者绘图,但这会导致很多闪烁,并且文本完全错误绘制、错误的字体、大小等。

我认为,从头开始编写文本框会有点过头了。

【问题讨论】:

  • 我以前从头写过文本框;这并不难,尤其是在您可以更直接地控制渲染框架的情况下(如在 Winforms 中)
  • 不要过分挑剔——因为我假设您正在处理一个遗留项目,但是覆盖 WinForms 中控件的默认外观/感觉就像试图用钝勺子给猪剥皮一样。您可以选择在 WPF 中进行开发吗?在 WPF 中很容易实现。
  • @Doug 不,我不能切换到 WPF,我很想在 WPF 中做这些事情,但我的公司仍在使用 winforms。

标签: c# winforms textbox


【解决方案1】:

这是不可能的。 TextBox 类是自 Windows 版本 2 以来一直存在的本机 Windows 控件的包装器。它必须在一些非常糟糕的硬件上运行,他们必须打破一些规则才能使其工作。其中之一是它使用标准的 Windows 绘制周期来绘制自身的一部分。 Winforms 术语中的 Invalidate() 和 OnPaint()。由于应用程序兼容性问题,无法修复此行为。有太多代码以创造性但不可预测的方式入侵了控件。

因此,无法拦截绘图以防止它擦除部分背景图像。没有解决方法,创建自己的工作量很大。考虑 WPF。

【讨论】:

    【解决方案2】:

    如果您特别需要文本框的不同背景,我们提供了一种解决方法here

    【讨论】:

    • Hans Passants 的回答是一个很好的解释,但链接描述的解决方法对我有用。
    猜你喜欢
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 2017-07-05
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多