使用反射,我在填充一个具有类类型的组合框,然后基于每个类的公共属性创建用于输入的文本框。
考虑到每个类都有返回不同类型(字符串,浮点数,整数)的属性,我如何验证每种类型,将其从文本框中传递来创建传递给列表框的类实例?每个文本框必须采用不同的类型。
主要目标是将这些实例发送到列表框。 我正在学习反射和linq,所以我想用它们来做。
我尝试使用此词典,但不能将其用于多个属性类型。
private void OnButton1Click(object sender, EventArgs e)
{
Dictionary<string, string> populatedProperties = Controls.OfType<TextBox>()
.ToDictionary(x => x.Name, x => ValidateInputType(x.Text));
User createdUser = (User)Activator.CreateInstance(selectedType);
foreach (PropertyInfo property in selectedType.GetProperties().Where(x => x.CanWrite))
{
property.SetValue(createdUser, populatedProperties[property.Name]);
}
listBoxUsers.Items.Add(createdUser.ToString());
}
///我正在使用以下方法创建文本框: int i = 50;
foreach (var prop in selectedUserType.GetProperties().Where(x => x.CanWrite))
{
Controls.Add( new TextBox
{
Name = prop.Name,
Location = new Point(150, 10 + i),
Tag = prop
});
i = i + 40;
}
//并验证:
private string ValidateInputType(string input)
{
if (string.IsNullOrWhiteSpace(input))
return "Input is null or White Space";
}
我希望能够将这些各种属性传递给listBox。
答案 0 :(得分:0)
在创建文本框时,在您的foreach循环内,添加一个针对文本更改的文本验证,并直接指向该文本框的验证器。
当您处于foreach循环中时,您可以获取属性类型,该属性类型可用于将特定文本框的ontextchange事件指向正确的验证器。
只要您知道它的 OnTextChanged