如何解决在C#中按字符串查找控件的属性
| 我知道这个问题被问了一百万遍,但我不知道如何定义搜索,因此请耐心等待。 我想使要在控制动态方面设置一些属性的方法引用发送给方法的字符串。 像这样的东西public void SetGridColumnProperty(ref DataGridView grid,string columnName,string propretyName,string propertyValue )
{
grid.Columns[columnName].(\"I know this can\'t be done as this\") = propertyValue;
}
如果我的问题难以理解,我深表歉意,
在这里我想做什么
我正在使WinForms应用程序使用很多od数据网格视图来显示和编辑数据。
由于我需要经常更改网格的外观,添加列编辑顺序等,所以我的想法是为表单上的每个DataGird保留某种元数据,当我向用户显示表单时,我需要在加载之前
我的表单通过联接元数据和特定网格的属性来设置网格的属性。
我希望将配置文件与XML或数据库中的实际代码分开,因此在我对应用程序进行编辑时,我不必重新编译新代码,只需更改xml,然后在下一个查找格式中就可以了
解决方法
首先,因为
DataGridView
是引用类型,所以不需要使用ref
关键字。其次,这是解决方案:
public void SetGridColumnProperty(DataGridView grid,string columnName,string propertyName,object propertyValue)
{
DataGridViewColumn dgvColumn = grid.Columns[columnName];
typeof(DataGridViewColumn).GetProperty(propertyName).SetValue(dgvColumn,propertyValue,null);
}
样品:
SetGridColumnProperty(dataGridView1,\"ColumnName\",\"Width\",500);
更新:调用SetValue方法之前,请检查PropertyInfo
类的CanWrite
属性。
,好的,所以您在谈论反射。您可以查找很多资源,这些资源将引用反射命名空间。
为了让您开始设置属性,您可能需要沿着以下几行使用MethodInfo:
MethodInfo invokedMethod = grid.GetType().GetProperty(\"propertyName\").GetSetMethod();
invokedMethod.Invoke(targetObject,parameters);
,您可以使用PropertyInfo
获取控件的属性并分配其值
public void SetGridColumnProperty(ref DataGridView grid,string propretyName,string propertyValue )
{
PropertyInfo pInfo = grid.GetType().GetProperty(propretyName);
if (pInfo != null)
{
TypeConverter tc = TypeDescriptor.GetConverter(pInfo.PropertyType);
if (tc.CanConvertFrom(Type.GetType(propertyValue.GetType().ToString())))
{
valToSet = tc.ConvertFromString(propertyValue);
pInfo.SetValue(grid,valToSet,null);
}
}
}
希望这可以帮助
,可以使用反射来完成,在您需要此类型的类型上查看GetProperties。这将为每个属性返回一个PropertyInfo对象数组。检查CanWrite
是否为所需的属性返回true,然后使用SetValue
设置属性值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。