我需要编写一个与原始 winforms 文本框完全不同的文本框。事实上我需要不同的背景,我怎样才能实现这一点?我尝试使用 SetStyle(ControlStyles.UserPaint, true);
进行所有者绘图,但这会导致大量闪烁,并且文本绘制完全错误,字体、大小等错误。
我认为从头开始编写文本框有点过分了。
最佳答案
这是不可能的。 TextBox 类是自 Windows 版本 2 以来就存在的 native Windows 控件的包装器。它必须在一些非常糟糕的硬件上运行,他们必须打破一些规则才能使其工作。其中之一是它绘制自身的一部分不使用标准的 Windows 绘制周期。 Winforms 术语中的 Invalidate() 和 OnPaint()。由于应用程序兼容性问题,无法修复此行为。太多的代码以创造性但不可预测的方式侵入了控件。
因此,无法拦截绘图以防止其删除部分背景图像。对此没有解决方法,创建自己的方法需要大量工作。考虑 WPF。
关于c# - 文本框的自定义外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5332330/