C# 反射获取对象实例和给类对象、Winform窗体赋值

//最近有个以前人写的winform项目要维护,要增加很多窗体控件,以下记录使用反射赋值的方法:
窗体:
控件名称要与定义的类名称一致;
在这里插入图片描述
类:

在这里插入图片描述
方法封装

        //设置控件text
        public void setFormValue(Control controls,object moldClass)
        {
            if (moldClass != null&& controls !=null)
            {
                var content = moldClass.GetType().GetProperties();
                int count = content.Count();
                for (int i = 0; i < count; i++)
                {
                    var controlsFind = controls.Controls.Find(content[i].Name, true);
                    if (controlsFind != null)
                    {
                        foreach (var item in controlsFind)
                        {
                            try
                            {
                                var value = content[i].GetValue(moldClass,null);
                                if (value != null)
                                {
                                    item.Text = value.ToString();
                                }                               
                            }
                            catch (Exception)
                            {

                            }
                        }
                    }
                }
            }
        }
        //获取控件text
        public void getFormValue(Control controls,object moldClass)
        {
            var content = moldClass.GetType().GetProperties();
            int count = content.Count();
            for (int i = 0; i < count; i++)
            {
                var controlsFind = controls.Controls.Find(content[i].Name, true);
                if (controlsFind != null)
                {
                    foreach (var item in controlsFind)
                    {
                        try
                        {
                            var value = item.Text;
                            if (value != null)
                            {
                                if (item is DateTimePicker) //特殊控件需要转化类型
                                {
                                    content[i].SetValue(moldClass,Convert.ToDateTime(value), null);
                                }
                                else
                                {
                                    content[i].SetValue(moldClass, value, null);
                                }                                
                            }
                        }
                        catch (Exception)
                        {

                        }
                    }
                }
            }
        }
        //获取DataTable赋值对象类
        public void getDataTableValue(DataTable dt,object moldClass)
        {
            var content = moldClass.GetType().GetProperties();
            //int count = content.Count();
            foreach (var item in content)
            {
                item.SetValue(moldClass, dt.Rows[0][item.Name], null);//单行取值
            }
        }

//测试调用:

private void simpleButton2_Click(object sender, EventArgs e)
        {
            Entity.material10 sw = new Entity.material10();
            sw.material = "102366663V";
            sw.VATNo = "YES";
            sw.replaceProject = "";
            sw.registerDate = DateTime.Now;
            sw.No = 200;
            setFormValue(tabControl1.TabPages[0],sw);
        }

//效果(控件名称必须和对象属性名称一致):
在这里插入图片描述
对象赋值:
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值