private void BtnOK_Click(object sender, EventArgs e) { // 全般設定 setting.MinPlayTime = double.Parse(txtMinPlayTime.Text); setting.TimeWeight = double.Parse(txtTimeWeight.Text); setting.WindowTitlePattern = txtWindowTitlePattern.Text; setting.StopWhenWindowsLocked = chkStopWhenWindowsLocked.Checked; // 追加時の設定 setting.TitlePattern = txtTitlePattern.Text; setting.ExtensionRules = ((IEnumerable <ExtensionRule>)dgvExtension.DataSource).ToList(); // ステータスバー setting.ShowStatus = chkShowStatus.Checked; setting.StatusItems.Clear(); foreach (object item in clbStatusItem.CheckedItems) { setting.StatusItems.Add(StatusItem.Parse(item.ToString())); } // ログ setting.EraseLogOnExit = chkEraseLogOnExit.Checked; setting.LogFile = txtLogFile.Text; for (int i = 0; i < clbLog.Items.Count; i++) { ((PropStringPair)clbLog.Items[i]).prop.SetValue(setting, clbLog.GetItemChecked(i), null); } // エラー処理 setting.IgnoreTimerError = chkIgnoreTimerError.Checked; setting.ReportException = chkReportException.Checked; }
private void Load(string fileName) { if (File.Exists(fileName)) { string err = ""; try { using StreamReader sr = new StreamReader(fileName); string line; string[] elem; while ((line = sr.ReadLine()) != null) { elem = line.Split('\t'); if (elem.Length != 2) { if (elem.Length == 3) { PropertyInfo pi3 = GetType().GetProperty(elem[0]); if (pi3.PropertyType == typeof(List <ExtensionRule>)) { ((List <ExtensionRule>)pi3.GetValue(this, null)).Add(ExtensionRule.Parse(elem[1], elem[2])); } } continue; } if (elem[0] == "StatusItem") { elem[0] = "StatusItems"; } if (elem[0] == "Logging") { elem[0] = "PlayLog"; } PropertyInfo pi = GetType().GetProperty(elem[0]); if (pi == null) { err += $"存在しない設定項目「{elem[0]}」を読み込もうとしました。\n"; continue; } object?value = null; try { switch (Type.GetTypeCode(pi.PropertyType)) { case TypeCode.Boolean: value = bool.Parse(elem[1]); break; case TypeCode.Byte: value = byte.Parse(elem[1]); break; case TypeCode.Char: value = char.Parse(elem[1]); break; case TypeCode.DBNull: err += $"読み込みに対応していない設定「{elem[0]}」を読み込もうとしました。\n"; continue; case TypeCode.DateTime: value = DateTime.Parse(elem[1]); break; case TypeCode.Decimal: value = decimal.Parse(elem[1]); break; case TypeCode.Double: value = double.Parse(elem[1]); break; case TypeCode.Empty: err += $"読み込みに対応していない設定「{elem[0]}」を読み込もうとしました。\n"; continue; case TypeCode.Int16: value = short.Parse(elem[1]); break; case TypeCode.Int32: value = int.Parse(elem[1]); break; case TypeCode.Int64: value = long.Parse(elem[1]); break; case TypeCode.Object: if (pi.PropertyType == typeof(List <StatusItem>)) { ((List <StatusItem>)pi.GetValue(this, null)).Add(StatusItem.Parse(elem[1])); } else { err += $"読み込みに対応していない設定「{elem[0]}」を読み込もうとしました。\n"; } continue; case TypeCode.SByte: value = sbyte.Parse(elem[1]); break; case TypeCode.Single: value = float.Parse(elem[1]); break; case TypeCode.String: value = elem[1]; break; case TypeCode.UInt16: value = ushort.Parse(elem[1]); break; case TypeCode.UInt32: value = uint.Parse(elem[1]); break; case TypeCode.UInt64: value = ulong.Parse(elem[1]); break; default: err += $"読み込みに対応していない設定「{elem[0]}」を読み込もうとしました。\n"; continue; } pi.SetValue(this, value, null); } catch (Exception e) { err += $"設定「{elem[0]}」の値「{elem[1]}」が以下のエラーのため認識できませんでした。\n メッセージ:{e.Message}\n"; } } } catch (Exception e) { err += $"設定読み込み中に以下のエラーが発生しました。\n メッセージ:{e.Message}\n"; } if (err.Length > 0) { MessageBox.Show(err); } } if (StatusItems.Count == 0) { StatusItems.Add(new StatusItemFullPathName()); StatusItems.Add(new StatusItemPlayGauge()); } }