//出力ファイル(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); }
//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()" } }