Свойство Text
сбрасывается после InitializeComponent
формы.
Когда вы посмотрите на файл Designer.cs
Form
, вы должны найти строку, подобную следующей:
private void InitializeComponent()
{
this.richTextBoxEx1 = new WindowsFormsApp1.RichTextBoxEx(); //<-- RichTextBoxEx gets initialized and ITS constructor and InitializeComponent gets called
this.SuspendLayout();
//
// richTextBoxEx1
//
this.richTextBoxEx1.Location = new System.Drawing.Point(322, 106);
this.richTextBoxEx1.Name = "richTextBoxEx1";
this.richTextBoxEx1.Size = new System.Drawing.Size(100, 96);
this.richTextBoxEx1.TabIndex = 0;
this.richTextBoxEx1.Text = ""; //<-- Text Property gets reseted
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.richTextBoxEx1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
Вы можете преодолеть это, переопределив OnCreateControl
Так что измените свой контроль следующим образом:
public class RichTextBoxEx : RichTextBox
{
protected override void OnCreateControl()
{
Text = "Hello World";
base.OnCreateControl();
}
}
Если OnCreateControl
вызывается несколько раз -хотя его определение в состояниях MSDN:
Метод OnCreateControl вызывается при первом создании элемента управления
Затем вы можете принудительно вызвать его один раз, используялогическое, чтобы отслеживать, если он был вызван или нет, поэтому попробуйте следующее:
public class RichTextBoxEx : RichTextBox
{
private bool _initialized = false;
protected override void OnCreateControl()
{
if (!_initialized)
{
_initialized = true;
Text = "Hello World";
}
base.OnCreateControl();
}
}