我在 Windows 窗体中使用
RichTextBox
,没有任何特殊之处
当我在构造函数中更改文本框的只读属性时,一切都会按预期工作
public MyForm()
{
...
tbDoc.ReadOnly = true;
}
当我在第一次显示后执行相同操作时,例如,单击按钮
private void BnDoSth_Click(object sender, EventArgs e)
{
tbDoc.ReadOnly = !tbDoc.ReadOnly;
}
只读功能仅得到部分应用。
不再可能输入文本(如预期),但更改的背景颜色不会反映在控件中。
它要么保持灰色,要么保持白色。在调试器中,我可以验证属性
BackGroundColor
是否相应更改。
使文本框或整个表单无效没有帮助。
当前的解决方法是重新创建文本框,但这对我来说似乎有点过分了......
有什么建议/类似经历吗?
这似乎是由于
RichTextBox
中对背景颜色的一些奇怪处理造成的。
我找到了一种有点古怪的修复方法:
(1) 从
RichTextBox
派生一个新类,如下:
public sealed class MyRichTextBox : RichTextBox
{
protected override void OnReadOnlyChanged(EventArgs e)
{
base.OnReadOnlyChanged(e);
OnBackColorChanged(EventArgs.Empty);
}
}
(2) 在表单的“Designer.cs”文件中,将
RichTextBox
的所有实例更改为 MyRichTextBox
。
(3) 现在当您更改
ReadOnly
状态时,背景颜色将正确更新。