【发布时间】:2011-05-18 13:38:27
【问题描述】:
我有一个承载 TextBox 的 C# UserControl。
当自定义控件被禁用时,我希望将 TextBox 呈现为已禁用 + ReadOnly(即不灰显)。因此,当自定义控件捕获 EnabledChanged 时,它会相应地设置托管的 TextBox 属性。
但是,UserControl 的 Enabled 状态优先于其他所有状态,并且 TextBox 仍然呈现为灰色(即使其内部 ForeColor 是正确的)。
因此,我决定在禁用自定义控件时隐藏托管的 TextBox 并自己绘制它。我可以使用各种 ControlPaint.DrawXxx 函数成功渲染 TextBox 边框。
但是,与原生渲染相比,绘制文本会导致输出拉伸。也就是说,文本从完全相同的像素位置开始,但字符间距明显更大。
我使用 TextBox 自己的字体来执行渲染,所以我不知道我做错了什么。我能做的唯一理由是 C# TextBox 是由 Windows 直接呈现的(使用 ExtTextOut Win32 API),这会导致明显的差异。
我可以使用哪些选项来模拟原生 TextBox 渲染?
【问题讨论】:
标签: .net winforms graphics controls textbox