我试图从称为TextBoxRialiTextBox创建一个新控件,这是一种货币文本框。

问题是,当我覆盖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;
        }
    }

10-07 19:24