首页 > 解决方案 > 在构造函数中更改扩展的 RichTextBox 文本不起作用

问题描述

我有以下课程:

public partial class RichTextBoxEx : RichTextBox
{
    public RichTextBoxEx()
    {
        InitializeComponent();
        Text = "Some Text";
    }
}

但是,当我将它放在表单上并运行程序时,它RichTextBox是空的。有什么问题,我该如何解决?

在此处输入图像描述

我认为这里缺少一些基本的东西,但我不知道是什么,而且我没有设法找到任何有关此的信息。

标签: c#.netwinformsrichtextboxwindows-forms-designer

解决方案


您在控件的构造函数中设置的属性值通常会受到尊重。但对于Text财产来说,情况就有些不同了。我已经在另一个答案中描述了它。实际上是控件设计器TextInitializeNewComponent.

作为一个选项,您可以创建和注册一个新的控件设计器,在调用方法之前覆盖InitializeNewComponent和捕获属性值。然后在调用基本方法后,再次将属性设置为默认值。Textbase.InitializeNewComponentText

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


推荐阅读