我们使用派生的Form-Classes,我们的软件有一个基本表单类。
在派生表单上,我们广泛使用DataBinding处理我们的BusinessObjects,所有这些都实现了IDataErrorInfo,使用ErrorProviders向GUI输入错误输入的自定义错误消息。
我现在搜索一种在base-form-class中实现函数的方法,以获取Form上的所有ErrorProvider-Components,并将Form上的每个Control的IconAlignment设置为左(因为右边是间距问题)
任何提示都欢迎......
设置IconAlignment的代码:
private void SetErrorProviderIconAlignment(ErrorProvider errorProvider, Control control)
{
errorProvider.SetIconAlignment(control, ErrorIconAlignment.MiddleLeft);
foreach (Control subControl in control.Controls)
{
SetErrorProviderIcon(errorProvider, subControl);
}
}
答案 0 :(得分:1)
我们使用了一个继承的ErrorProvider
组件,它强制设置/返回IconAlignment扩展属性的默认值。
E.g。
[ToolboxBitmap(typeof(ErrorProvider))]
[ProvideProperty("IconAlignment", typeof(Control))]
public class MyErrorProvider : ErrorProvider
{
#region Base functionality overrides
// We need to have a default that is explicitly different to
// what we actually want so that the designer generates calls
// to our SetIconAlignment method so that we can then change
// the base value. If the base class made the GetIconAlignment
// method virtual we wouldn't have to waste our time.
[DefaultValue(ErrorIconAlignment.MiddleRight)]
public new ErrorIconAlignment GetIconAlignment(Control control)
{
return ErrorIconAlignment.MiddleLeft;
}
public new void SetIconAlignment(Control control, ErrorIconAlignment value)
{
base.SetIconAlignment(control, ErrorIconAlignment.MiddleLeft);
}
#endregion
}
然后,您可以轻松搜索/替换new ErrorProvider()
并替换为new MyErrorProvider()
。
我不记得确切,但你可能会发现你可能需要打开Form的设计器,以便让它重新序列化SetIconAlignment
文件中传递给form.designer.cs
的值......