プロパティグリッドに表示されるプロパティを含めたり除外したりする必要があるカスタムControlDesignerを作成しました。しかし、何らかの理由で、コードを無視しているように見えますか?何を間違えたのかわかりませんか?何かが足りないのでしょうか?VSなどを設定する必要がありますか?
また、私が見つけた例では、remove呼び出しがどこにあるべきかについて意見が一致していないようです。いくつかの例では、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);
}
}
}
誰かアイデアはありますか?助けてくれてありがとう