Esempio n. 1
0
        //出力ファイル(Option.ini)からの入力用<br>
        //不正な文字列があった場合は、無効行として無視される<br>
        public bool FromReg(String str)
        {
            if (str == null)
            {
                Value = null;
                return(false);
            }
            switch (OneCtrl.GetCtrlType())
            {
            case CtrlType.Dat:
                CtrlDat ctrlDat = (CtrlDat)OneCtrl;
                Dat     dat     = new Dat(ctrlDat.CtrlTypeList);
                if (!dat.FromReg(str))
                {
                    Value = null;
                    return(false);
                }
                //Ver5.8.7 Java fix Datの中にComboBoxが存在する場合の旧バージョンの変換
                foreach (var d in dat)
                {
                    for (int i = 0; i < ctrlDat.ListVal.Count; i++)
                    {
                        if (ctrlDat.ListVal[i].OneCtrl.GetCtrlType() == CtrlType.ComboBox)
                        {
                            int val;
                            if (!int.TryParse(d.StrList[i], out val))
                            {
                                //Ver5.7.x以前のデータ
                                OneVal dmy = new OneVal("dmy", null, Crlf.Nextline, ctrlDat.ListVal[i].OneCtrl);
                                if (dmy.FromRegConv(d.StrList[i]))
                                {
                                    d.StrList[i] = dmy.ToReg(false);
                                }
                            }
                        }
                    }
                }
                Value = dat;
                break;

            case CtrlType.CheckBox:
                try {
                    Value = Boolean.Parse(str);
                } catch {
                    Value = false;
                    return(false);
                }
                break;

            case CtrlType.Font:
                Value = null;
                var tmp = str.Split(',');
                if (tmp.Length == 3)
                {
                    try{
                        var family = new FontFamily(tmp[0]);
                        var size   = (float)Convert.ToDouble(tmp[1]);
                        var style  = (FontStyle)Enum.Parse(typeof(FontStyle), tmp[2]);
                        Value = new Font(family, size, style);
                    }catch (Exception) {
                        Value = null;
                    }
                }
                if (Value == null)
                {
                    return(false);
                }
                break;

            case CtrlType.Memo:
                Value = Util.SwapStr("\t", "\r\n", str);
                break;

            case CtrlType.File:
            case CtrlType.Folder:
            case CtrlType.TextBox:
                Value = str;
                break;

            case CtrlType.Hidden:
                try{
                    Value = Crypt.Decrypt(str);
                }
                catch (Exception) {
                    Value = "";
                    return(false);
                }
                break;

            case CtrlType.Radio:
                try{
                    Value = Int32.Parse(str);
                }catch (Exception) {
                    Value = 0;
                    return(false);
                }
                if ((int)Value < 0)
                {
                    Value = 0;
                    return(false);
                }
                break;

            case CtrlType.ComboBox:
                int max = ((CtrlComboBox)OneCtrl).Max;
                try {
                    var n = Int32.Parse(str);
                    if (n < 0 || max <= n)
                    {
                        Value = 0;
                        return(false);
                    }
                    Value = n;
                } catch {
                    Value = 0;
                    //Ver5.9.2 Ver5.7.x以前のデータのコンバート
                    OneVal dmy = new OneVal("dmy", null, Crlf.Nextline, OneCtrl);
                    if (dmy.FromRegConv(str))
                    {
                        int n;
                        Int32.TryParse(dmy.ToReg(false), out n);
                        if (n < 0 || max <= n)
                        {
                            Value = 0;
                            return(false);
                        }
                        Value = n;
                    }
                    return(false);
                }
                break;

            case CtrlType.Int:
                try {
                    Value = Int32.Parse(str);
                } catch {
                    Value = 0;
                    return(false);
                }
                break;

            case CtrlType.BindAddr:
                try{
                    Value = new BindAddr(str);
                }
                catch (ValidObjException) {
                    Value = 0;
                    return(false);
                }
                break;

            case CtrlType.AddressV4:
                try{
                    Value = new Ip(str);
                }
                catch (ValidObjException) {
                    Value = null;
                    return(false);
                }
                break;

            case CtrlType.TabPage:
            case CtrlType.Group:
                break;

            default:
                Value = 0;
                return(false);
                // "実装されていないCtrlTypeが指定されました OneVal.fromReg()"
            }
            return(true);
        }
Esempio n. 2
0
        //public void setListener(ICtrlEventListener listener) {
        //    for (OneVal oneVal : GetList(null)) {
        //        oneVal.getOneCtrl().setListener(listener);
        //    }
        //}

        //設定ファイル(Option.ini)への出力
        //isSecret=true デバッグ用の設定ファイル出力用(パスワード等を***で表現する)
        public String ToReg(bool isSecret)
        {
            switch (OneCtrl.GetCtrlType())
            {
            case CtrlType.Dat:
                if (Value == null)
                {
                    var d = new Dat(((CtrlDat)OneCtrl).CtrlTypeList);
                    return(d.ToReg(isSecret));
                }
                return(((Dat)Value).ToReg(isSecret));

            case CtrlType.CheckBox:
                return(((bool)Value).ToString().ToLower());

            case CtrlType.Font:
                if (Value != null)
                {
                    var font = (Font)Value;
                    return(string.Format("{0},{1},{2}", font.FontFamily.Name, font.Size, font.Style.ToString()));
                }
                return("");

            case CtrlType.File:
            case CtrlType.Folder:
            case CtrlType.TextBox:
                return((String)Value);

            case CtrlType.Hidden:
                if (isSecret)
                {
                    return("***");
                }
                try{
                    return(Crypt.Encrypt((String)Value));
                }
                catch (Exception) {
                    return("ERROR");
                }

            case CtrlType.Memo:
                return(Util.SwapStr("\r\n", "\t", (string)Value));

            case CtrlType.Radio:
            case CtrlType.ComboBox:
            case CtrlType.Int:
                return(((int)Value).ToString());

            case CtrlType.BindAddr:
                return(Value.ToString());

            case CtrlType.AddressV4:
                return(Value.ToString());

            case CtrlType.TabPage:
            case CtrlType.Group:
                return("");

            default:
                return("");    // "実装されていないCtrlTypeが指定されました OneVal.toReg()"
            }
        }