Question

Nous utilisons dérivé forme des classes, avec une classe de forme de base pour notre logiciel.

Sur les formes dérivées, nous utilisons Databinding abondamment pour faire face à nos BusinessObjects, tous, la mise en œuvre IDataErrorInfo lancer des messages d'erreur personnalisés dans les fausses entrées à l'interface graphique avec ErrorProviders.

Je cherche maintenant un moyen de mettre en œuvre une fonction dans la base sous forme de classe pour obtenir tous les ErrorProvider-composants sur un formulaire et définissez les IconAlignment pour chaque contrôle sur le formulaire à gauche (puisque le droit est un problème d'espacement) .

Les Conseils bienvenue ...

Code pour Réglage du IconAlignment:

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

    foreach (Control subControl in control.Controls)
    {
        SetErrorProviderIcon(errorProvider, subControl);
    }
}
Était-ce utile?

La solution

Nous avons utilisé un composant hérité ErrorProvider au lieu qui avec force réglée / retour par défaut pour la IconAlignment propriété étendue.

par exemple.

[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
}

Ensuite, vous pouvez facilement faire une recherche / remplacement pour new ErrorProvider() et le remplacer par new MyErrorProvider().

Je ne me souviens pas exactement, mais vous pouvez constater que vous devrez peut-être ouvrir le concepteur du formulaire afin d'obtenir à resérialisation la valeur passée dans SetIconAlignment dans les fichiers form.designer.cs ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top