首先你这个修改的是Field,不是属性,然后如果你只修改一个实例对象的值,没听过会导致另一个实例对象会受影响,除非是你设置了static变量简单的说,这是你的代码问题,或者是你的调用问题

解决方案 »

  1.   

            private int aa = 0;
            [Category(""), Description(""), ReadOnlyAttribute(false), BrowsableAttribute(true)]
            public int a
            {
                get { return aa; }
                set
                { 
                    aa = value;
                    if (aa == 1)
                        SetPropertyVisability(this, "b", false);
                }
            }        private int bb = 0;
            [Category(""), Description(""), ReadOnlyAttribute(false), BrowsableAttribute(true)]
            public int b
            {
                get { return bb; }
                set { bb = value; }
            }
      

  2.   

    3楼是个简化代码 
    刚刚启动时左右两个实例分别有两个属性显示,且属性值都为0
    之后我只修改了左边实例的a属性值为1,所以左边的属性b不见了,同时右边实例的属性b也不见了
      

  3.   

    修改一个类对象属性,会影响第二个,这个有点不可思议了!
    类对象,存储在不同的堆上,怎么可能级联修改呢!根据你的代码,我测试了一下,你可以看下效果
    class MyType
        {
            private int aa = 0;
            [Category(""), Description(""), ReadOnlyAttribute(false), BrowsableAttribute(true)]
            public int a
            {
                get { return aa; }
                set
                {
                    aa = value;
                    if (aa == 1)
                        SetPropertyVisability(this, "b", false);
                }
            }        private int bb = 0;
            [Category(""), Description(""), ReadOnlyAttribute(false), BrowsableAttribute(true)]
            public int b
            {
                get { return bb; }
                set { bb = value; }
            }        /// <summary>设置属性的可见性</summary>
            /// <param name="obj">属性所属的类</param>
            /// <param name="propertyName">属性名</param>
            /// <param name="visable">可见性</param>
            public static void SetPropertyVisability(object obj, string propertyName, bool visable)
            {
                Type type = typeof(System.ComponentModel.BrowsableAttribute);
                PropertyDescriptorCollection props = TypeDescriptor.GetProperties(obj);
                AttributeCollection attrs = props[propertyName].Attributes;
                FieldInfo fld = type.GetField("browsable", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.CreateInstance);
                fld.SetValue(attrs[type], visable);
            }
        }
     MyType m1 = new MyType();
                MyType m2 = new MyType();
                m1.a = 1;
                Console.WriteLine(m1.a + "," + m1.b);
                Console.WriteLine(m2.a + "," + m2.b);
      

  4.   

    不好意思 是我没表达清楚 我不是说实例1属性值改变实例2属性的值,而是改变了属性本身的可见性,用propertyGrid空间展示两个实例对象的时候,两个实例都显示了2个属性,当实例1的a=1时,实例1的b属性在propertyGrid控件中不再可见,这是我想要的效果,也实现了,但是实例2的b属性也在propertyGrid中不可见了。
      

  5.   

    不好意思 本帖描述的比较混乱 已经另开新帖详细说明问题 http://bbs.csdn.net/topics/390983016