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