Ejemplo n.º 1
0
        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());
            }
        }
Ejemplo n.º 2
0
 private static void AddItemInfo(StatusItem item)
 {
     items.Add(item.ToString(), item);
 }