Как программно установить значок ErrorProvider для всех элементов управления - PullRequest
3 голосов
/ 19 мая 2010

Мы используем производные классы форм, с одним базовым классом форм для нашего программного обеспечения.

В производных формах мы широко используем DataBinding для работы с нашими BusinessObjects, все из которых реализуют IDataErrorInfo, отправляя пользовательские сообщения об ошибках на ложных входах в графический интерфейс с помощью ErrorProviders.

Теперь я ищу способ реализовать функцию в базовом классе формы, чтобы получить все ErrorProvider-Components в форме и установить IconAlignment для каждого элемента управления в форме слева (поскольку право - это проблема с пробелами) .

Любые подсказки приветствуются ...

Код для настройки IconAlignment:

private void SetErrorProviderIconAlignment(ErrorProvider errorProvider, Control control)
{
    errorProvider.SetIconAlignment(control, ErrorIconAlignment.MiddleLeft);

    foreach (Control subControl in control.Controls)
    {
        SetErrorProviderIcon(errorProvider, subControl);
    }
}

1 Ответ

1 голос
/ 19 мая 2010

Вместо этого мы использовали унаследованный компонент ErrorProvider, который принудительно установил / вернул значение по умолчанию для расширенного свойства IconAlignment.

Е.Г.

[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().

Я не могу точно вспомнить, но вы можете обнаружить, что вам может понадобиться открыть конструктор формы, чтобы заставить его повторно сериализовать значение, переданное в SetIconAlignment в файлах form.designer.cs ...

...