2008-09-18 9 views
7

J'ai une application Windows Forms avec des contrôles tels que textbox, combobox, datagridview, etc. Ces commandes permettent à un utilisateur d'utiliser le clipboad, c'est-à-dire couper/copier et coller du texte. Il est également possible de supprimer du texte (qui n'est pas lié au presse-papiers).Comment activer/désactiver le menu Couper/Copier/Coller et les éléments de la barre d'outils d'une manière générique?

Mon application a une barre de menu avec un élément d'édition contenant des éléments Couper/Copier/Coller/Supprimer et une barre d'outils avec ces éléments. Comment puis-je activer/désactiver ces éléments correctement selon l'état du contrôle ayant le focus?

Je cherche un moyen générique, c'est-à-dire que je cherche une implémentation que je fais une fois, et que je puisse réutiliser pour l'avenir indépendamment des contrôles que mon application utilisera.

Répondre

0

Créez un tableau pour chaque groupe d'activation/désactivation. Ajoutez les contrôles au tableau (bien sûr, il doit être du type correct tel que Object ou Any, etc. dépend du langage de programmation que vous utilisez). Ensuite, pour activer, désactivez simplement la boucle dans la matrice et invoquez la méthode ou la fonction d'activation/désactivation pour chaque contrôle. Encore une fois, en fonction de la langue que vous devrez peut-être rejeter.

3

Il n'existe aucune interface générique ni aucun ensemble de méthodes permettant d'obtenir des informations de couper/copier/coller à partir d'un contrôle Windows Forms.

Je suggère que votre meilleure approche serait de créer une classe de wrapper pour chaque type de contrôle. Ensuite, lorsque vous souhaitez mettre à jour l'état du menu, vous obtenez le contrôle actuel avec focus et créez le wrapper approprié pour celui-ci. Ensuite, vous demandez ce wrapper pour les informations d'état dont vous avez besoin. De cette façon, vous avez seulement besoin de créer une implémentation wrapper pour chaque type de contrôle que vous utilisez. Peu de douleur pour commencer, mais vous n'avez qu'à ajouter les nouveaux contrôles que vous rencontrez.

Les informations sur le presse-papier sont beaucoup plus simples car vous pouvez demander au répertoire singleton s'il contient des données et quel type il contient. Ensuite, vous devez encore demander au contrôle cible s'il peut accepter ce type d'informations, de sorte qu'il reste encore du travail à faire.