Je remplace ma grille de propriétés par quelque chose qui me permettra de personnaliser un peu mieux mon interface utilisateur. J'ai placé un bouton sur mon formulaire qui, une fois cliqué, me ferait apparaître un CollectionEditor et me permettrait de modifier mon code. Lorsque j'utilisais PropertyGrid, tout ce que je devais faire était d'ajouter des attributs à la propriété pointant vers mon CollectionEditor et cela a fonctionné. Mais comment appeler manuellement le CollectionEditor? Merci!Est-il possible d'utiliser un objet CollectionEditor en dehors de la grille de propriétés?
Répondre
trouvé la réponse ici: http://www.devnewsgroups.net/windowsforms/t11948-collectioneditor.aspx
Juste au cas où le site lié ci-dessus en va un jour, voici l'essentiel. Le code est verbatim du lien ci-dessus, cependant; les commentaires sont à moi.
Supposons que vous avez un formulaire avec un ListBox et un bouton. Si vous vouliez modifier les éléments dans la liste en utilisant le CollectionEditor, vous effectuez les opérations suivantes dans votre gestionnaire d'événements:
private void button1_Click(object sender, System.EventArgs e)
{
//listBox1 is the object containing the collection. Remember, if the collection
//belongs to the class you're editing, you can use this
//Items is the name of the property that is the collection you wish to edit.
PropertyDescriptor pd = TypeDescriptor.GetProperties(listBox1)["Items"];
UITypeEditor editor = (UITypeEditor)pd.GetEditor(typeof(UITypeEditor));
RuntimeServiceProvider serviceProvider = new RuntimeServiceProvider();
editor.EditValue(serviceProvider, serviceProvider, listBox1.Items);
}
Maintenant, la prochaine chose que vous devez faire est de créer le RuntimeServiceProvider(). Voici le code de l'affiche dans le lien ci-dessus a écrit à mettre en œuvre ceci:
public class RuntimeServiceProvider : IServiceProvider, ITypeDescriptorContext
{
#region IServiceProvider Members
object IServiceProvider.GetService(Type serviceType)
{
if (serviceType == typeof(IWindowsFormsEditorService))
{
return new WindowsFormsEditorService();
}
return null;
}
class WindowsFormsEditorService : IWindowsFormsEditorService
{
#region IWindowsFormsEditorService Members
public void DropDownControl(Control control)
{
}
public void CloseDropDown()
{
}
public System.Windows.Forms.DialogResult ShowDialog(Form dialog)
{
return dialog.ShowDialog();
}
#endregion
}
#endregion
#region ITypeDescriptorContext Members
public void OnComponentChanged()
{
}
public IContainer Container
{
get { return null; }
}
public bool OnComponentChanging()
{
return true; // true to keep changes, otherwise false
}
public object Instance
{
get { return null; }
}
public PropertyDescriptor PropertyDescriptor
{
get { return null; }
}
#endregion
}
Puisque je ne peux pas commenter ce que je vais poster ici:
Vous pouvez obtenir le DialogResult en ajoutant un événement Cliquez sur le okButton du CollectionEditor dans WindowsFormsEditorService.ShowDialog
public System.Windows.Forms.DialogResult ShowDialog(Form dialog)
{
((System.Windows.Forms.Button)dialog.Controls.Find("okButton", true)[0]).Click += WindowsFormsEditorService_Click;
return dialog.ShowDialog();
}
...
private void WindowsFormsEditorService_Click(object sender, EventArgs e)
{
dr = DialogResult.OK;
}
- 1. Modifier la couleur de premier plan des propriétés en lecture seule dans une grille de propriétés
- 2. Réinitialisation des propriétés d'une grille de propriétés
- 3. Est-il possible de créer un objet System :: Type représentant un objet DateTime sans objet DateTime?
- 4. Problème lors de la modification de la collection readonly personnalisée dans la grille de propriétés, .net, winforms
- 5. Modification de CollectionEditor dans PropertyGrid
- 6. Flex: Boutons dans la grille de données, est-ce possible d'accéder aux propriétés de la colonne
- 7. rafraîchir une collection dans la grille de propriété
- 8. Objet de la classe de propriétés dans vb
- 9. Grille de propriétés partagée entre deux formulaires
- 10. est-il possible de rendre à l'objet framebuffer en dehors de la boucle de rendu principale
- 11. Elément de grille de propriétés et DoubleClick
- 12. Objet de propriétés automatiques dans .NET
- 13. Est-il possible de lier des propriétés de type complexes à une grille de données?
- 14. Fusionner un objet qui était en dehors du datacontext
- 15. GRILLE DE DONNÉES AVANCÉE: Définition des propriétés des colonnes individuelles dans la grille mxml
- 16. Création d'une grille de propriétés dans MFC
- 17. Création d'une grille de propriétés WPF?
- 18. Comment utiliser la grille de propriétés dans un formulaire pour modifier un type
- 19. Est-il possible de définir des propriétés sur un objet Mock dans Simpletest
- 20. Afficher plusieurs objets dans la grille de propriétés
- 21. L'événement ne s'affiche pas dans la grille de propriétés
- 22. Utilisation d'un dictionnaire dans une grille de propriétés
- 23. propriétés immutables d'un objet en C#
- 24. Référence à un objet contenu dans une position de grille
- 25. Est-il possible de sauvegarder uniquement les parties modifiées d'un objet de liste de propriétés?
- 26. Grille de propriété .Net. Existe-t-il un moyen de laisser la grille manipuler l'objet de manière différente?
- 27. Créer un objet en dehors d'une classe de façade, brise-t-il le modèle de façade?
- 28. objet complexe dans Dojo Grille
- 29. Est-il possible de changer un modèle en dehors du thread de travail Swing?
- 30. Saisie semi-automatique pour le champ de la grille de propriétés
+1 Fantast solution ic. Semble le seul inconvénient est que je ne peux pas voir si l'utilisateur appuie sur «Annuler». Est-ce que je manque quelque chose? – Brad