C# PropertyGrid 使用的有关问题

img

 public class Cavity
    {
        public double X { get; set; }
        public double Y { get; set; }
        public double Angle { get; set; }
        public override string ToString()
        {
            return X.ToString() + "," + Y.ToString() + "," + Angle.ToString();
        }
    }
    public class Setting
    {
        protected ConcurrentDictionary<string, string> settingMap = new ConcurrentDictionary<string, string>();
        private Cavity _cavity = new Cavity();
        [TypeConverter(typeof(ExpandableObjectConverter))]
        public Cavity Cavity1
        {
            get
            {
                //return _cavity;
                return ConvertStr2Object(settingMap["Cavity1"], ',');
            }
            set
            {
                //_cavity = value;
                settingMap["Cavity1"] = ConvertObject2Str(value, ',');
            }
        }
}

我需要在修改X、Y、Angle 对应执行Cavity1低下的Set,但在实际是无法执行的, Setting低下的Cavity属性还会有多个,比如Cavity2,Cavity3等 帮忙看下咋解决呢 谢谢

解决以上的问题,我想的是讨巧的办法

img

namespace Paramsss
{
    [TypeConverter(typeof(ExpandableObjectConverter))]
    public class Cavity
    {

        public Cavity(string str)
        {
            Name = str;
        }
        [Browsable(false)]
        public string Name { get; set; }
        public double X
        {
            get
            {
                return Globals.Setting1.ConvertStr2Double(Globals.Setting1.settingMap[Name], ',',0);
            }
            set
            {
                Globals.Setting1.settingMap[Name] =Globals.Setting1.ConvertDouble2Str(value,Y,Angle,',');
                ToString();
            }
        }
        public double Y
        {
            get
            {
                return Globals.Setting1.ConvertStr2Double(Globals.Setting1.settingMap[Name], ',', 1);
            }
            set
            {
                Globals.Setting1.settingMap[Name] = Globals.Setting1.ConvertDouble2Str(X, value, Angle, ',');
                ToString();
            }
        }

        public double Angle
        {
            get
            {
                return Globals.Setting1.ConvertStr2Double(Globals.Setting1.settingMap[Name], ',', 2);
            }
            set
            {
                Globals.Setting1.settingMap[Name] = Globals.Setting1.ConvertDouble2Str(X, Y, value, ',');
                ToString();
            }
        }
        public override string ToString()
        {
            return "X="+X.ToString() + ", Y=" + Y.ToString() + ", Angle=" + Angle.ToString();
        }
        
    }
    public class Setting
    {
        private Cavity _cavity1 = new Cavity("Cavity1");
        private Cavity _cavity2 = new Cavity("Cavity2");
        private Cavity _cavity3 = new Cavity("Cavity3");
        private Cavity _cavity4 = new Cavity("Cavity4");
        private Cavity _cavity5 = new Cavity("Cavity5");
        private Cavity _cavity6 = new Cavity("Cavity6");
        private Cavity _cavity7 = new Cavity("Cavity7");
        private Cavity _cavity8 = new Cavity("Cavity8");
        public Cavity Cavity1
        {
            get
            {
                return _cavity1;
            }
            set
            {
                _cavity1 = value;
            }
        }

        public Cavity Cavity2
        {
            get
            {
                return _cavity2;
            }
            set
            {
                _cavity2 = value;
            }
        }
        public Cavity Cavity3
        {
            get
            {
                return _cavity3;
            }
            set
            {
                _cavity3 = value;
            }
        }
        public Cavity Cavity4
        {
            get
            {
                return _cavity4;
            }
            set
            {
                _cavity4 = value;
            }
        }
        public Cavity Cavity5
        {
            get
            {
                return _cavity5;
            }
            set
            {
                _cavity5 = value;
            }
        }
        public Cavity Cavity6
        {
            get
            {
                return _cavity6;
            }
            set
            {
                _cavity6 = value;
            }
        }
        public Cavity Cavity7
        {
            get
            {
                return _cavity7;
            }
            set
            {
                _cavity7 = value;
            }
        }
        public Cavity Cavity8
        {
            get
            {
                return _cavity8;
            }
            set
            {
                _cavity8 = value;
            }
        }


        public ConcurrentDictionary<string, string> settingMap = new ConcurrentDictionary<string, string>();
       public double ConvertStr2Double(string str, char c, int v)
        {
            try
            {
                string[] ss = str.Split(c);    
                return Convert.ToDouble(ss[v]);

            }
            catch
            {
                return 0;
            }
        }

        public string ConvertDouble2Str(double x, double y, double angle, char c)
        {
            try
            {
                return x.ToString() + c + y.ToString() + c + angle.ToString();
            }
            catch
            {
                return "";
            }
        }
    }

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。