我制作了一个自定义 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);
}
}
}
有人有想法么?感谢任何帮助