J'ai fait un ControlDesigner personnalisé que j'ai besoin d'inclure et d'exclure les propriétés affichées dans la grille des propriétés. Mais pour une raison quelconque, il semble juste ignorer le code? Je ne sais pas ce que j'ai pu faire de mal? Pourrais-je manquer quelque chose? Ai-je besoin de configurer VS ou quelque chose?Réflexion et personnalisation ControlDesigner ne semble pas fonctionner dans C#
Dans les exemples, j'ai également trouvé qu'ils semblent être en désaccord sur l'endroit où l'appel de suppression devrait être. Dans certains exemples, ils l'appellent dans la méthode preFilterProperties et dans certains exemples, ils l'appellent dans la méthode postFilterProperties() qui me rend confus. Dans certains exemples, ils l'appellent après l'exécution de la méthode base.preFilterProperties() et parfois avant? Quelqu'un peut-il clarifier?
Voici le code jusqu'à présent. De préférence je voudrais aussi ajouter une propriété avec une liste de noms de propriétés qui seraient exclus mais je ne sais pas quand définir une telle propriété car il semble que la réflexion soit exécutée avant l'exécution? Ou y a-t-il un moyen d'accomplir cela?
using System.ComponentModel;
using System.Drawing.Design;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.Design;
using System.ComponentModel.Design;
using System;
using System.Collections;
using System.Collections.Generic;
namespace PropertyEditorProject
{
[Designer(typeof(YourClassDesigner))]
class MyPropertyClass
{
protected List<string> _MyList;
protected string _MyName;
protected string _MyCarModel;
protected int _MyAge;
public List<string> MyList
{
get
{
return _MyList;
}
set
{
_MyList = value;
}
}
public string MyName
{
get
{
return _MyName;
}
set
{
_MyName = value;
}
}
public string MyCarModel
{
get
{
return _MyCarModel;
}
set
{
_MyCarModel = value;
}
}
public int MyAge
{
get
{
return _MyAge;
}
set
{
_MyAge = value;
}
}
public MyPropertyClass()
{
_MyList = new List<string>();
_MyList.Add("Test");
_MyList.Add("Testing 2");
_MyName = "TestName";
_MyCarModel = "Subaru";
_MyAge = 20;
}
}
internal class YourClassDesigner : ControlDesigner
{
protected override void PreFilterProperties(System.Collections.IDictionary properties)
{
properties.Remove("MyAge");
base.PreFilterProperties(properties);
}
}
static class MainProgram
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Form form = new Form();
PropertyGrid grid = new PropertyGrid();
grid.Dock = DockStyle.Fill;
form.Controls.Add(grid);
grid.SelectedObject = new MyPropertyClass();
Application.Run(form);
}
}
}
Vous avez des idées? Reconnaissants pour toute aide