设置readonly属性在设置为布尔值时有效,但在由布尔变量赋值时无效

时间:2016-10-13 05:15:44

标签: c# winforms typedescriptor

我已经从codeproject中的set中获取了代码。如果Phone不等于QRTypeContact(QRType是枚举),我会尝试将属性设为Phone

public QRType Type 
{ 
    get { return type; } 
    set 
    { 
        type = value;
        PropertyDescriptor descriptor = TypeDescriptor.GetProperties(GetType())["Phone"];
        ReadOnlyAttribute attribute = (ReadOnlyAttribute)
            descriptor.Attributes[typeof(ReadOnlyAttribute)];
        FieldInfo fieldToChange = attribute.GetType().GetField("isReadOnly",
                                                 BindingFlags.NonPublic |
                                                 BindingFlags.Instance);

        bool v = (type != QRType.Contact && type != QRType.Phone);
        fieldToChange.SetValue(attribute, v );       
    }
}

以上代码无法正常工作,并且“电话”字段始终显示为灰色,同时设置值如下:

fieldToChange.SetValue(attribute, true );
fieldToChange.SetValue(attribute, false );

两者都正常工作。这有什么问题?

更新 有趣的是,如果不使用&&,它就可以了:

fieldToChange.SetValue(attribute, type != QRType.Contact);

0 个答案:

没有答案