//using System;
//using System.Collections.Generic;
//using System.ComponentModel;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;

//namespace ReiaSanTool.Class
//{
//    public class IniPropertyDescriptor : PropertyDescriptor
//    {
//        private Dictionary<string, string> _section;
//        private string _key;

//        public IniPropertyDescriptor(string sectionName, string key, Dictionary<string, string> sectionData)
//            : base($"{sectionName}_{key}", new Attribute[] { new CategoryAttribute(sectionName) })
//        {
//            _section = sectionData;
//            _key = key;
//        }

//        public override string DisplayName => _key;
//        public override Type ComponentType => typeof(IniAdapter);
//        public override bool IsReadOnly => false;
//        public override Type PropertyType => typeof(string);

//        // ★これを追加！型変換で迷わせないための「道しるべ」です
//        public override TypeConverter Converter => new StringConverter(); // 型変換で迷わせない

//        public override object GetValue(object component) => _section[_key];


//        // これらが False や Default だと、確定時に値が捨てられることがあります
//        public override bool CanResetValue(object component) => true;
//        public override void ResetValue(object component) { }
//        public override bool ShouldSerializeValue(object component) => true;

//        public override void SetValue(object component, object value)
//        {
//            // 確実に値を代入
//            _section[_key] = value?.ToString() ?? "";

//            // 【重要】PropertyGridに「このインスタンスの中身が変わったよ」と公式に通知
//            // これにより、PropertyGridはキャッシュを捨てて表示を更新します。
//            OnValueChanged(component, EventArgs.Empty);
//        }
//    }
//}