Я создал пользовательский ControlDesigner, который должен включать и исключать свойства, указанные в сетке свойств. Но почему-то это просто игнорирует код? Я не знаю, что я мог сделать неправильно? Могу ли я что-то упустить? Нужно ли мне настраивать VS или что-то еще?Отражение и пользовательские ControlDesigner, похоже, не работают в C#
Также в примерах, которые я нашел, они, похоже, не согласны с тем, где должен быть вызов на удаление. В некоторых примерах они называют это методом preFilterProperties, и в некоторых примерах они называют это методом postFilterProperties(), который меня смущает. В некоторых примерах они называют это после запуска метода base.preFilterProperties(), а иногда и раньше? Может кто-то прояснить?
Код указан в настоящий момент. Предпочтительно, я хотел бы также добавить свойство со списком имен свойств, которые будут исключены, но я не знаю, когда устанавливать такое свойство, поскольку кажется, что отражение выполняется до выполнения? Или есть способ сделать это?
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);
}
}
}
У кого-нибудь есть идеи? Благодарен за любую помощь