public static ModSrcFile FromFile(string file)
        {
            var data    = new ModSrcFile() { FileName= file };
            var lines   = File.ReadAllLines(file, Encoding.UTF8);
            var delim   = " \t".ToArray();

            foreach(var i in lines)
            {
                var line    = i.Trim();
                var enabled = true;

                if(line.StartsWith("//"))
                {
                    enabled = false;
                    line    = line.Substring(2).Trim();
                }

                var t       = line.Trim().Split(delim, StringSplitOptions.RemoveEmptyEntries);

                if(t.Length == 0)
                    continue;

                switch(t[0])
                {
                case "アイテム変更":
                    break;

                case "スロット名":
                    var slot= new ModSlot(data) { Name= t[1] };
                    data.Slots.Add(slot);
                    break;

                case "マテリアル番号":
                    var mtrl= new ModMaterial(data.CurrentSlot) { No= int.Parse(t[1]) };
                    data.CurrentSlot.Materials.Add(mtrl);
                    break;

                case "テクスチャ設定":
                    var tex = new ModTex()
                    {
                        Enabled = enabled,
                        Name    = t[1],
                        Texture = t[2]
                    };
                    data.CurrentMaterial.Textures.Add(tex);
                    break;

                case "色設定":
                    var col = new ModCol()
                    {
                        Enabled = enabled,
                        Name    = t[1],
                        R       = int.Parse(t[2]),
                        G       = int.Parse(t[3]),
                        B       = int.Parse(t[4]),
                        A       = int.Parse(t[5])
                    };
                    data.CurrentMaterial.Colors.Add(col);
                    break;

                case "数値設定":
                    var val = new ModValue()
                    {
                        Enabled = enabled,
                        Name    = t[1],
                        Value   = decimal.Parse(t[2])
                    };
                    data.CurrentMaterial.Values.Add(val);
                    break;

                default:
                    if(t.Length >= 2)
                        data.Descriptions.Add(t[0], string.Join(" ", t.Skip(1).ToArray()));

                    break;
                }
            }

            return data;
        }
 private void UpdateF(ModValue val)
 {
     var nud     = (NumericUpDown)Controls["nud"+val.Name];
     val.Value   = nud.Value;
 }
        private void cb_f_CheckedChanged(object sender, EventArgs e)
        {
            if(Data == null)
                return;

            var cb  = (CheckBox)sender;
            var name= cb.Name.Substring(2, cb.Name.Length-2);
            var val = Data.Values.FirstOrDefault(i => i.Name == name);

            if(val != null)
            {
                val.Enabled = cb.Checked;
            } else
            if(cb.Checked)
            {
                val = new ModValue() { Name= name, Enabled= true };
                UpdateF(val);
                Data.Values.Add(val);
            }
        }
 private void SetF(ModValue val, CheckBox cb, NumericUpDown nud)
 {
     cb.Checked  = val.Enabled;
     nud.Value   = val.Value;
 }