UserControl在C#中获取set属性

时间:2013-03-08 03:48:30

标签: c# winforms user-controls textbox get

我收到类似

的错误

“ciscontrols.dll中发生了'System.StackOverflowException'类型的未处理异常”。

我的代码如下:

    private int _vin;

    public int MaxLength
    {
        get { return _vin; }

        set //Here your answer solve the promblem
        {
            txtLocl.MaxLength = value;
            if (value < 2)
            {
                throw new ArgumentOutOfRangeException("MaxLength","MaxLength MinValue should be 2.");
            }
            else this._vin = value;
        }
    }

我正在为小数位创建一个新属性

private int Dval;
    public int DecPlaces
    {
        get { return Dval; }
        set// here it showing the same error
        {
            DecPlaces = value; // MaxLength is a preDefined Property but  DecPlaces created by me.
            if (value < 2)
            {
                throw new ArgumentOutOfRangeException("decplaces", "decimal places minimum value should be 2.");
            }
            else this.Dval = value;
        }
    }

3 个答案:

答案 0 :(得分:2)

你的setter是递归的,因为你有

this.MaxLength = value;

在你的二传手中。这将导致无限循环,最终导致StackOverflowException

使用

this._vin = value;

相反

答案 1 :(得分:2)

你的财产的设定者在这一行上自称:

 this.MaxLength = value;

将其更改为:

set //Here i am getting Error
{
    txtLocl.MaxLength = value;
    if (value < 2)
    {
        throw new ArgumentOutOfRangeException("MaxLength","MaxLength MinValue should be 2.");
    }
    else this._vin = value;
}

对于此特定异常,调试时在Visual Studio中显示的“调用堆栈”窗口有助于查看哪些方法在无限循环中相互调用。属性的setter最终成为运行时中名为set_MaxLength的方法。

答案 2 :(得分:1)

this.MaxLength = value

此行触发无限循环,因为它调用您已经在的set访问器。您是否要设置支持变量的值?