我试图从称为TextBox
的RialiTextBox
创建一个新控件,这是一种货币文本框。
问题是,当我覆盖Text
属性,然后构建控件时,在窗体上拖动新创建的TextBox时,Visual Studio崩溃。
我什至尝试了new
关键字,但随后又遇到了“堆栈溢出错误”。我究竟做错了什么?
这是我正在谈论的代码片段:
public override string Text
{
get
{
if (this.Text.Contains(" ريال")) {
return this.Text.Replace(" ريال", "");
}
return base.Text;
}
set
{
base.Text = value;
}
}
更新:
我遵循了建议的解决方案,其中希望我将所有
this.Text
更改为base.Text
。这样做可以解决Visual Studio崩溃和“堆栈溢出错误消息”的问题,但是我也注意到我重写的onEnter事件也停止了运行!当我完全注释掉新控件的重写Text属性时,该事件又恢复了功能!是什么原因造成的?
protected override void OnEnter(EventArgs e)
{
if (Mode == Modes.ریالی)
{
if (this.Text.Contains(" ريال"))
{
this.Text = this.Text.Replace(" ريال", "");
}
}
base.OnEnter(e);
}
最佳答案
您有一个无限循环。您的文本获取器正在获取自己。我认为您打算在几个地方使用base
而不是this
。
public override string Text
{
get
{
if (base.Text.Contains(" ريال"))
{
return base.Text.Replace(" ريال", "");
}
return base.Text;
}
set
{
base.Text = value;
}
}