J'ai un contrôle qui étend PropertyGrid qui permet aux utilisateurs de définir les propriétés de certains de mes objets de programme. Ces objets ont un événement qui est déclenché lorsque l'une de leurs propriétés est modifiée et le PropertyGrid s'abonne à cet événement pour qu'il se rafraîchisse automatiquement lorsqu'une propriété est modifiée. Mon problème se produit lorsqu'un grand nombre d'objets est sélectionné et l'utilisateur définit une propriété sur tous les objets à la fois. Le contrôle est inondé de requêtes Refresh(), ce qui prend beaucoup de temps (par exemple, définir une propriété sur ~ 300 objets prend environ 20 secondes avec la fonction de rafraîchissement automatique activée, et juste une fraction de seconde lorsqu'elle est activée de). Je souhaite empêcher le gestionnaire d'événements d'actualiser la grille alors que la grille de propriétés est en train de définir une propriété, mais je n'ai malheureusement pas trouvé de moyen de déterminer quand la grille "démarre" et "arrête" la définition de la propriété. J'espérais qu'il y aurait des méthodes ou quelque chose que je pourrais passer outre, comme ...Comment déterminer quand un contrôle PropertyGrid est sur le point de modifier la propriété d'un objet
override void OnSetPropertyStart()
{
suppressRefresh = true;
}
override void OnSetPropertyEnd()
{
suppressRefresh = false;
}
Malheureusement, cela ne semble pas être le cas. Existe-t-il un autre moyen de déterminer quand la grille de propriétés définit une propriété ou d'obtenir le même effet?
Sur .NET 3.5 ou version ultérieure, il serait préférable d'implémenter l'interface INotifyPropertyChanging définie par le framework plutôt que de créer un événement PropertyChanging personnalisé. Cela éviterait une prolifération inutile et jouerait sans doute mieux avec des fonctionnalités définies par le framework telles que la liaison de données. – itowlson
Point très valide. Modification pour mettre à jour. –
Merci pour votre réponse - Je vais voir combien d'effort cela prendrait (j'ai beaucoup de différents types d'objets avec beaucoup de propriétés que je devrais éditer pour faire cela). En attendant, j'ai résolu le problème en limitant les rafraîchissements PropertyGrid de sorte qu'ils ne peuvent se produire que toutes les 25 ms. Ceci est assez rapide pour que l'utilisateur ne s'en aperçoive pas, et semble résoudre le problème avec une tonne de requêtes Refresh() qui "s'empilent" tout à la fois. –