WinForm窗体中有大量TextBox控件,现有一个对象,请问如何将对象中的各个属性赋值给各个TextBox?
注:不是给每个TextBox分别赋值,要一个通用、简便的方法!

解决方案 »

  1.   


    for (int i = 0; i < LeaveFormGroupB.Controls.Count; i++)
                {
                    if (LeaveFormGroupB.Controls[i] is TextBox)
                    {
                        TextBox  temp = (TextBox)LeaveFormGroupB.Controls[i];
                        if (temp.Name == strValue.Trim())
                        {
                            //操作!@
                        }
                        else
                        {
                            temp.Checked = false;
                        }
                    }
                }
      

  2.   

    总有一个属性跟对象的PropertyName对应,一般是控件名,或者Tag属性也可以,另外单独一份mapping表也可以,然后循环控件或循环对象属性,根据mapping关系找出对应的另外一半,然后使用反射读取对象数据,赋值到textbox就可以了
      

  3.   

    foreach跑Controls集合。
    在里面调用GetType看Type是不是TextBox
    然后再看Name属性。
      

  4.   

    TO :libinguest ,cjcgy
    请教一下:1。我有六十多个属性需要显示,我应该如何做?不使用大量的控件的话有什么好的办法吗?
              2。原来我是使用“每个控件赋值”的方法,但发现这样太麻烦,后来使用反射,不过十行代码就解决问题了,请问您这样动态赋值有什么不好的吗?真诚等待您的答案!
      

  5.   


    string[] Value ={ "1", "2", "3","4" };            for (int i = 0; i < LeaveFormGroupB.Controls.Count; i++)
                {
                    if (LeaveFormGroupB.Controls[i] is TextBox)
                    {
                        TextBox temp = (TextBox)LeaveFormGroupB.Controls[i];                    temp.Text = Value[LeaveFormGroupB.Controls.Count-i-1];
                                       }
                }
      

  6.   


    /// <summary>
            /// 载入信息<para></para>
            /// 控件命名要求已3字母前缀加实体属性名(大小写敏感)
            /// <para>文本 txt;日期 dtp;下拉框 drp;数字 dec</para>
            /// </summary>
            /// <param name="container">数据录入控件的容器,通常为panel</param>
            /// <param name="item">已设置主键的实体</param>
            protected void LoadInfo(Control container, EntityObject item)
            {
                item.Retrieve();
                object obj = null;
                Type objtype = item.GetType();
                for (int i = 0; i < container.Controls.Count; i++)
                {
                    if (container.Controls[i].Name.StartsWith("dec"))
                    {
                        TextBox txt = container.Controls[i] as TextBox;
                        obj = objtype.GetProperty(txt.Name.Substring(3)).GetValue(item, null);
                        string c = obj == null ? string.Empty : obj.ToString();
                        decimal dc = 0;
                        decimal.TryParse(c, out dc);
                        txt.Text = dc.ToString("##########.####");
                        if (string.IsNullOrEmpty(txt.Text))
                        {
                            txt.Text = "0";
                        }
                    }
                    else if (container.Controls[i].Name.StartsWith("txt"))
                    {
                        TextBox txt = container.Controls[i] as TextBox;
                        obj = objtype.GetProperty(txt.Name.Substring(3)).GetValue(item, null);
                        txt.Text = obj == null ? string.Empty : obj.ToString();
                    }               
                    else if (container.Controls[i].Name.StartsWith("drp"))
                    {
                        ComboBox drp = container.Controls[i] as ComboBox;
                        obj = objtype.GetProperty(drp.Name.Substring(3)).GetValue(item, null);
                        string v = obj == null ? string.Empty : obj.ToString();
                        //drp.Text = v;
                        if (obj != null)
                        {
                            drp.SelectedIndex = drp.FindString(obj.ToString());
                        }
                        else
                        {
                            int emptyindex=drp.FindString("空白");                        
                            drp.SelectedIndex = emptyindex;
                        }
                    }
                    else if (container.Controls[i].Name.StartsWith("tmp"))
                    {
                        CheckBox chk = container.Controls[i] as CheckBox;
                        DateTimePicker dtp = container.Controls[container.Controls[i].Name.ToString().Substring(3)] as DateTimePicker;
                        obj = objtype.GetProperty(dtp.Name.Substring(3)).GetValue(item, null);
                        if ((obj.ToString() != "0001-1-1 0:00:00") && (obj.ToString() != "0001/1/1 0:00:00"))
                        {
                            chk.Text = string.Empty;
                            chk.Checked = true;
                            dtp.Visible = true;
                            dtp.Value = DateTime.Parse(obj.ToString());
                        }
                        else
                        {
                            dtp.Visible = false;
                            chk.Text = "点击选择日期";
                            chk.Checked = false;
                        }
                    }                
                    //统一设置DataGridView格式:
                    else if (container.Controls[i].Name.StartsWith("dgv"))
                    {
                        DataGridView dgview = container.Controls[i] as DataGridView;
                        dgview.BackgroundColor = SystemColors.Window;
                        dgview.DefaultCellStyle.BackColor = Color.White;
                        dgview.DefaultCellStyle.ForeColor = Color.Gray;
                        dgview.DefaultCellStyle.SelectionForeColor = Color.Blue;
                        dgview.DefaultCellStyle.SelectionBackColor = Color.Aqua;
                    }                
                    else if (container.Controls[i].Name.StartsWith("int"))
                    {
                        TextBox txt = container.Controls[i] as TextBox;
                        obj = objtype.GetProperty(txt.Name.Substring(3)).GetValue(item, null);
                        string c = obj == null ? string.Empty : obj.ToString();
                        int dc = 0;
                        int.TryParse(c, out dc);
                        txt.Text = dc.ToString();
                        if (string.IsNullOrEmpty(txt.Text))
                        {
                            txt.Text = "0";
                        }
                    }
                }
            }
      

  7.   

    不是有PropertyGrid控件么,专门显示属性的
      

  8.   

    和这个类似....已解决...简单而明了http://topic.csdn.net/u/20100403/11/9f6de45e-a2cf-4cf9-98ad-65ddbaf92089.html
      

  9.   

    楼主的意思是否想用绑定呀?可以参考Control.DataBindings 属性。如果需要遍历对象的属性,可以采用反射获取PropertyInfo