WinForm窗体中有大量TextBox控件,现有一个对象,请问如何将对象中的各个属性赋值给各个TextBox?
注:不是给每个TextBox分别赋值,要一个通用、简便的方法!
注:不是给每个TextBox分别赋值,要一个通用、简便的方法!
解决方案 »
- .Net WinForm系统运行越来越慢
- 小妹请教一个File.Copy奇怪的问题。
- "dataGridView与textbox同时绑定一张table相同字段"有关问题
- c#及时获得数据库更新信息
- 用Graphics 生成的矢量图片很大,有没有可能改善,在线等
- C#中如何在IE中打开一个word文件?
- //***************** TreeView 控件如何通过Nodes的名称取得它的索引值???????????
- 各位大虾快来帮帮忙,都快急死了
- c#的ListView使用问题:能否捕获insert或delete项(行)的事件??
- 为什么不能把字符串变成整形,(int)(cc.Substring(cc.Length-1,cc.Length));这样为什么不行,谢谢!
- 如何用vs2008开发C/S版的程序
- 如何对VS08里的控件 Location,size赋值
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;
}
}
}
在里面调用GetType看Type是不是TextBox
然后再看Name属性。
请教一下:1。我有六十多个属性需要显示,我应该如何做?不使用大量的控件的话有什么好的办法吗?
2。原来我是使用“每个控件赋值”的方法,但发现这样太麻烦,后来使用反射,不过十行代码就解决问题了,请问您这样动态赋值有什么不好的吗?真诚等待您的答案!
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];
}
}
/// <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";
}
}
}
}