在构造函数中更改扩展的 RichTextBox 文本不起作用

2023-12-23

我有以下课程:

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

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

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


您在控件的构造函数中设置的属性值是usually受到尊重。但对于Text财产,情况有点不同。我已经在另一篇文章中描述过answer https://stackoverflow.com/q/35790863/3110834。 事实上是控制设计者设置的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;
    }
}

Note:不要忘记添加参考System.Design集会。

边注:不是为了Text属性,但对于其他类似的情况,您在构造函数中设置时看到属性值不受尊重,另一个嫌疑人是CreateComponentsCore of ToolboxItem的控制。为了example https://stackoverflow.com/a/48353592/3110834 for AutoSize的财产Label.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在构造函数中更改扩展的 RichTextBox 文本不起作用 的相关文章