如何以编程方式为所有控件设置ErrorProvider图标

时间:2010-05-19 10:29:26

标签: c# winforms errorprovider

我们使用派生的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);
    }
}

1 个答案:

答案 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的值......