c# - 在构造函数中更改扩展的 RichTextBox 文本不起作用
问题描述
我有以下课程:
public partial class RichTextBoxEx : RichTextBox
{
public RichTextBoxEx()
{
InitializeComponent();
Text = "Some Text";
}
}
但是,当我将它放在表单上并运行程序时,它RichTextBox
是空的。有什么问题,我该如何解决?
我认为这里缺少一些基本的东西,但我不知道是什么,而且我没有设法找到任何有关此的信息。
解决方案
您在控件的构造函数中设置的属性值通常会受到尊重。但对于Text
财产来说,情况就有些不同了。我已经在另一个答案中描述了它。实际上是控件设计器Text
在InitializeNewComponent
.
作为一个选项,您可以创建和注册一个新的控件设计器,在调用方法之前覆盖InitializeNewComponent
和捕获属性值。然后在调用基本方法后,再次将属性设置为默认值。Text
base.InitializeNewComponent
Text
using System.ComponentModel;
using System.Windows.Forms;
using System.Windows.Forms.Design;
[Designer(typeof(RichTextBoxExDesigner))]
public class RichTextBoxEx : RichTextBox
{
public RichTextBoxEx ()
{
Text = "Some Text";
}
}
public class RichTextBoxExDesigner : ControlDesigner
{
public override void InitializeNewComponent(System.Collections.IDictionary defaultValues)
{
var txt = Control.Text;
base.InitializeNewComponent(defaultValues);
Control.Text = txt;
}
}
注意:不要忘记添加对System.Design
程序集的引用。
旁注:不是Text
属性,而是其他类似情况,当您在构造函数中设置时,您看到属性值不受尊重,另一个嫌疑人是CreateComponentsCore
控件ToolboxItem
。例如对于. _AutoSize
_Label
推荐阅读
- windows - 无法从 Jenkins 中的远程网络共享驱动器复制文件
- python - 安装 python xlwings 模块
- python - spark-submit using pyspark -- ModuleNotFoundError: No module named 'CommonPackage'
- windows - WDM/KMDF 驱动程序的单元测试
- xml - 找不到调度方法
- javascript - 从两个不同的数组中查找并获取(多个)对象值
- javascript - 搜索栏过滤显示结果,但不过滤 API 的其余部分
- javascript - Discord.js 命令导入
- python - 如何使用多处理/线程运行 requests_html 的网页渲染器的多个实例?
- powerbi - DAX 从矩阵中的年份或季度中减去固定值