我有以下课程:
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(使用前将#替换为@)