以下代码可以实现动态设置控件指定的属性的值。代码如下。
/// <summary>
/// 设置控件的属性的值
/// </summary>
/// <typeparam name="TControl">控件类型</typeparam>
/// <typeparam name="TValue">属性值类型</typeparam>
/// <param name="control">控件</param>
/// <param name="propertyName">属性名</param>
/// <param name="value">属性值</param>
public static void SetBehavior<TControl,TValue>(Control control, string propertyName, TValue value)
{
if (control is TControl)
{
Type t = typeof(TControl);
PropertyInfo propertInfo = t.GetProperty(propertyName);
propertInfo.SetValue(control, value);
}
}
通过表达式树实现通用的控件属性值设置方法
/// <summary>
/// 设置控件的属性的值
/// </summary>
/// <typeparam name="TControl">控件类型</typeparam>
/// <typeparam name="TValue">返回的属性值类型</typeparam>
/// <param name="control">控件</param>
/// <param name="memberLambda">表示控件属性的表达式树</param>
/// <param name="value">属性值</param>
public static void SetProperty<TControl, TValue>(Control control, Expression<Func<TControl,TValue>>memberLambda, TValue value)
{
if (control is TControl)
{
var memberSelectorExpression = memberLambda.Body as MemberExpression;
if (memberSelectorExpression!=null)
{
var property = memberSelectorExpression.Member as PropertyInfo;
if (property!=null)
{
property.SetValue(control, value);
}
}
}
}