Comment mettre ErrorProvider Icône gauche pour tous les contrôles par programme
-
30-09-2019 - |
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);
}
}
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
...