2008-09-23 6 views
1

J'essaie d'effectuer un comportement d'interface utilisateur personnalisé sur un contrôle Windows Forms PropertyGrid. J'aimerais pouvoir répondre aux clics et aux doubles-clics sur GridItems pour changer l'état. Par exemple, pour retourner une variable binaire ou ternaire à travers ses états.Comment trouver GridItem en cliquant sur PropertyGrid?

Je peux obtenir à la vue sous-jacente en recherchant un enfant de type "PropertyGridView" et peut accrocher son événement Click. Le seul problème est alors qu'est-ce que je fais? Je ne trouve aucune fonction qui mappe les coordonnées de la souris sur les éléments de la grille.

Il existe un objet SelectedGridItem mais ce n'est pas utile. Il y a beaucoup d'endroits où vous pouvez cliquer sur un contrôle qui ne met pas à jour cette propriété, et donc répondre à un clic en supposant que SelectedGridItem est mis à jour obtiendra beaucoup de résultats incorrects.

En plus de l'achat d'un contrôle du réseau d'immeubles commerciaux ou du passage à une grille quelconque, y a-t-il quelque chose que je puisse faire ici? Le PropertyGrid est presque exactement ce dont j'ai besoin. J'envisage même de me promener avec Reflector et de faire des choses très hostiles avec ce contrôle pour obtenir les données dont j'ai besoin. :)

Plus d'informations: Je sais utiliser les classes personnalisées UITypeEditor, et je le fais déjà dans d'autres domaines (sélecteur de couleurs). Malheureusement, le travail d'interface utilisateur personnalisé nécessite un clic supplémentaire (pour parcourir ou dérouler une interface utilisateur). Par exemple, j'ai coché une case en utilisant UITypeEditor.PaintValue et j'aimerais vraiment pouvoir cliquer dessus pour cocher/décocher.

Répondre

2

Si vous devez retourner les valeurs d'un type simple, vous pouvez afficher une valeur d'énumération dans la grille de propriétés. Cela apparaîtra automatiquement comme une liste déroulante. Si vous avez besoin pour créer un éditeur d'interface utilisateur plus intelligent, je vous suggère de vous jeter un regard sur les articles suivants qui expliquent comment créer l'interface utilisateur personnalisée dans la grille de la propriété: http://msdn.microsoft.com/en-us/library/aa302334.aspx http://msdn.microsoft.com/en-us/library/aa302326.aspx

Si vous souhaitez gérer une valeur modifier dans la grille de propriétés pour faire quelque chose dans l'application ou modifier les valeurs dans la grille de propriété, vous pouvez gérer le OnPropertyValueChanged qui est soulevée après chaque changement dans la grille de propriétés.

Il n'est pas nécessaire de gérer le clic de la souris et le double-clic de la souris une fois que vous avez créé votre propre éditeur d'interface utilisateur. Les éditeurs d'interface utilisateur peuvent être des éditeurs déroulants ou des éditeurs modaux. Encore une fois, je vous suggère fortement de lire les articles ci-dessus. Ils sont plutôt bons.

+0

J'essaie d'accélérer le flux de l'interface utilisateur - le menu déroulant est un clic de trop. Voici un bon exemple de ce que je veux dire. J'ai intégré une case à cocher via UITypeEditor.PaintValue pour les propriétés bool. Je voudrais cocher/décocher en cliquant dans la case à cocher. Double-cliquez sur Je veux avancer à travers des énumérations simples. – scobi