最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#將部分Controls數據導入對象并存入ini中的操作方法

 更新時間:2024年10月09日 12:35:23   作者:薄荷撞~可樂  
在Winform設計中,經常需要將控件數據導出到屬性或字段中,本文詳細介紹了如何優(yōu)化這一過程,包括控件和屬性的遍歷,以及使用FieldInfo的getSet函數和Ini類庫來實現(xiàn)數據的有效存儲和轉換,感興趣的朋友跟隨小編一起看看吧

在日常的Winform設計工作中,將控件中的數據導出到對應屬性或者字段中,再進行保存是經常會用到的技巧;最簡單的就是同時遍歷控件和遍歷屬性字段進行名稱對比(需要保證控件的名稱要包含在字段屬性中);

本篇文章主要是在簡單的基礎上優(yōu)化整體邏輯,不僅僅是只遍歷控件和屬性進行名稱對比(適合類),還包含一些篩選;

1.遍歷控件和屬性得到控件的值

 在下面代碼中,控件命名是以textBox_one的形式命名的

///類對象
class ObjectParm
    {
        public int one;
        public string two;
        public int three;
        public string four;
        public int five;
        public string six;
    }
private void Save(ObjectParm objectParm, Control controls, string TextName = "textBox_", string ComboBoxName = "comboBox_")
        {
            Type type = objectParm.GetType();
            //獲取有關成員屬性的信息以及提供對成員數據的訪問
            MemberInfo[] memberInfos = type.GetMembers();//獲取所有公共成員
            foreach (Control control in controls.Controls)
            {
                foreach (MemberInfo item in memberInfos)
                {
                    //這里字段屬性均可以
                    if (item.MemberType == MemberTypes.Field)
                    {
                        if (control is ComboBox)
                        {
                            if (control.Name == ComboBoxName + item.Name)
                            {
                                string value = control.Text;
                                //需要篩選對象屬性的類型
                                SetMemberValue(objectParm, item.Name, value);
//---------------------------------注意----------------------------------
//SetMemberValue函數是判斷屬性或者字段的類型,根據類型進行不同的賦值
                            }
                        }
                        else if (control is TextBox)
                        {
                            if (control.Name == TextName + item.Name)
                            {
                                string value = control.Text;
                                //需要篩選對象屬性的類型
                                SetMemberValue(objectParm,item.Name,value);
                            }
                        }
                    }
                }
            }
        }

 2.利用FieldInfo的getSet函數設置類對象數據

/// <summary>
        /// 設置類對象成員數據
        /// </summary>
        /// <param name="objectParm"></param>
        /// <param name="fileName"></param>
        /// <param name="filevalue"></param>
//Istype函數是對比類型是否一致
        private bool SetMemberValue(ObjectParm objectParm, string fileName, string filevalue)
        {
            Type type = objectParm.GetType();
            //發(fā)現(xiàn)字段屬性并提供訪問
            FieldInfo fieldInfo = type.GetField(fileName);//搜索字段
            bool ConverFlag = true;
            //類型匹配
            if (Istype(fieldInfo.FieldType, "System.String"))
            {
                fieldInfo.SetValue(objectParm, filevalue);
            }
            if (Istype(fieldInfo.FieldType, "System.Double"))
            {
                //判斷是否可以進行轉
                double result = 0;
                if (!double.TryParse(filevalue, out result)) ConverFlag = false;
                fieldInfo.SetValue(objectParm, result);
            }
            if (Istype(fieldInfo.FieldType, "System.Single"))
            {
                float result = 0;
                if (!float.TryParse(fileName, out result))
                    ConverFlag = false;
                fieldInfo.SetValue(objectParm, result);
            }
            if (Istype(fieldInfo.FieldType, "System.Boolean"))
            {
                bool flag = false;
                if (!Boolean.TryParse(fileName, out flag))
                    ConverFlag = false;
                fieldInfo.SetValue(objectParm, flag);
            }
            if (Istype(fieldInfo.FieldType, "System.UInt32"))
            {
                uint value = 0;
                if (!uint.TryParse(fileName, out value))
                    ConverFlag = false;
                fieldInfo.SetValue(objectParm, value);
            }
            if (Istype(fieldInfo.FieldType, "System.UInt16"))
            {
                UInt16 value = 0;
                if (!UInt16.TryParse(fileName, out value))
                    ConverFlag = false;
                fieldInfo.SetValue(objectParm, value);
            }
            if (Istype(fieldInfo.FieldType, "System.Int32"))
            {
                int value = 0;
                if (!Int32.TryParse(fileName, out value))
                    ConverFlag = false;
                fieldInfo.SetValue(objectParm, value);
            }
            if (Istype(fieldInfo.FieldType, "System.Decimal"))
            {
                if (filevalue != "")
                    fieldInfo.SetValue(objectParm, Decimal.Parse(filevalue));
                else
                    fieldInfo.SetValue(objectParm, new Decimal(0));
            }
            if (Istype(fieldInfo.FieldType, "System.Nullable`1[System.DateTime]"))
            {
                if (filevalue != "")
                {
                    try
                    {
                        fieldInfo.SetValue(objectParm, (DateTime?)DateTime.ParseExact(filevalue, "yyyy-MM-dd HH:mm:ss", null));
                    }
                    catch
                    {
                        fieldInfo.SetValue(objectParm, (DateTime?)DateTime.ParseExact(filevalue, "yyyy-MM-dd", null));
                    }
                }
                else
                    fieldInfo.SetValue(objectParm, null);
            }
            return ConverFlag;
        }
private bool Istype(Type type, string typeName)
        {
            if (type.ToString() == typeName)
            { return true; }
            if (type.ToString() == "System.Object")
                return false;
            return Istype(type.BaseType, typeName);
        }

 3.Ini簡易類庫編寫

class IniClass
    {
        public static string inipath = Directory.GetCurrentDirectory() + "\\" + "systemset.ini";//這個地方實際沒用到,在另外一個地方
        [System.Runtime.InteropServices.DllImport("kernel32")]
        public static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
        [System.Runtime.InteropServices.DllImport("kernel32")]
        public static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
        public IniClass(string inipath_)
        {
            inipath = inipath_;
        }
        /// ﹤summary﹥   /// 寫入INI文件   /// ﹤/summary﹥   /
        // ﹤param name="Section"﹥項目名稱(如 [TypeName] )﹤/param﹥   
        /// ﹤param name="Key"﹥鍵﹤/param﹥   
        /// ﹤param name="Value"﹥值﹤/param﹥   
        public void IniWriteValue(string Section, string Key, string Value)
        {
            WritePrivateProfileString(Section, Key, Value, inipath);
        }
        /// ﹤summary﹥   
        /// 讀出INI文件   
        /// ﹤/summary﹥   
        /// ﹤param name="Section"﹥項目名稱(如 [TypeName] )﹤/param﹥   
        /// ﹤param name="Key"﹥鍵﹤/param﹥   
        public string IniReadValue(string Section, string Key, string default_value = "")
        {
            StringBuilder temp = new StringBuilder(50000);
            int i = GetPrivateProfileString(Section, Key, default_value, temp, 50000, inipath);
            return temp.ToString();
        }

 4.存入對象轉換為json存入ini

string Path = @"E:\ymx\Test\將部分Controls數據導入對象\sys.ini";
        private void button1_Click(object sender, EventArgs e)
        {
            Save(objectParm,panel1, "textBox_", "comboBox_");
            string str = JsonConvert.SerializeObject(objectParm);
            //存入ini
            IniClass iniClass = new IniClass(Path);
            iniClass.IniWriteValue("Parm", "trest", str);
         }

 5.效果展示

到此這篇關于C#將部分Controls數據導入對象并存入ini中的文章就介紹到這了,更多相關C#Controls數據存入ini中內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Unity實現(xiàn)彈球打磚塊游戲

    Unity實現(xiàn)彈球打磚塊游戲

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)彈球打磚塊游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C#從DataTable獲取數據的方法

    C#從DataTable獲取數據的方法

    這篇文章主要介紹了C#從DataTable獲取數據的方法,涉及C#操作DataTable的相關技巧,需要的朋友可以參考下
    2015-06-06
  • ASP.NET C#中Application的用法教程

    ASP.NET C#中Application的用法教程

    這篇文章主要給大家介紹了關于ASP.NET C#中Application的用法,在介紹Application的用法之前,先給大家介紹了Session的用法供大家參考學習,文中介紹的非常詳細,需要的朋友們下面跟著小編一起來學習學習吧。
    2017-05-05
  • C#?wpf?Bitmap轉換成WriteableBitmap的方法

    C#?wpf?Bitmap轉換成WriteableBitmap的方法

    本文主要介紹了C#?wpf?Bitmap轉換成WriteableBitmap的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • C# 常用公共方法

    C# 常用公共方法

    這篇文章主要為大家詳細介紹了C# 常用公共方法,分享給大家,供大家參考,感興趣的小伙伴們可以參考一下
    2016-07-07
  • C#向線程中傳遞多個參數的解決方法(兩種)

    C#向線程中傳遞多個參數的解決方法(兩種)

    這篇文章主要介紹了C#向線程中傳遞多個參數的解決方法(兩種)的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • C#導出Excel的示例詳解

    C#導出Excel的示例詳解

    這篇文章主要為大家詳細介紹了C#導出Excel的示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • C#安裝OpenCvSharp4的實現(xiàn)步驟

    C#安裝OpenCvSharp4的實現(xiàn)步驟

    OpenCv是一款開源的圖像處理庫,本文就介紹了C#安裝OpenCvSharp4的實現(xiàn)步驟,具有一定的參考價值,感興趣的可以了解一下
    2022-05-05
  • Entity?Framework配置關系

    Entity?Framework配置關系

    這篇文章介紹了Entity?Framework配置關系的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • C#中深度復制和淺度復制詳解

    C#中深度復制和淺度復制詳解

    這篇文章主要介紹了C#中深度復制和淺度復制的相關資料,需要的朋友可以參考下
    2015-10-10

最新評論

汪清县| 和龙市| 隆林| 阿图什市| 江油市| 福泉市| 黑山县| 新龙县| 佳木斯市| 综艺| 无锡市| 民勤县| 沈丘县| 理塘县| 文安县| 南通市| 中方县| 汶上县| 延吉市| 静乐县| 彰化市| 美姑县| 封丘县| 丰镇市| 紫阳县| 惠东县| 武强县| 康定县| 洞口县| 广平县| 安多县| 长岭县| 松潘县| 秦皇岛市| 安仁县| 金塔县| 辰溪县| 乌什县| 郸城县| 岐山县| 扎赉特旗|