[英]C# force PropertyGrid to not expand a sub-class property and display it at root level
[英]How to display Object with sub-class in PropertyGrid
我將使用PropertyGrid來顯示我的對象。 這是info類。 Info類有一些由類類型組成的屬性。 但是,子類不顯示屬性。 你有什么主意嗎?
代碼段:
using System.ComponentModel;
using System.Windows.Forms;
namespace WindowsFormsApplication_propertyGrid
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
info _in = new info();
this.propertyGrid1.SelectedObject = _in;
}
}
[DefaultPropertyAttribute("Name")]
[TypeConverter(typeof(ExpandableObjectConverter))]
public class info
{
private int _id;
[CategoryAttribute("Defaults")]
public int Id
{
get { return _id; }
set { _id = value; }
}
private string _name;
[CategoryAttribute("Defaults")]
public string Name
{
get { return _name; }
set { _name = value; }
}
private DoublePoint _resultMarkPos;
[CategoryAttribute("Results")]
[TypeConverter(typeof(ExpandableObjectConverter))]
public DoublePoint ResultMarkPos
{
get { return _resultMarkPos; }
set { _resultMarkPos = value; }
}
public struct DoublePoint
{
public double x, y;
}
private subInfo1 _sub1;
[CategoryAttribute("SubInfo")]
[TypeConverter(typeof(ExpandableObjectConverter))]
public subInfo1 SubInfo1
{
get { return _sub1; }
set { _sub1 = value; }
}
private subInfo2 _sub2;
[CategoryAttribute("SubInfo2")]
[TypeConverter(typeof(ExpandableObjectConverter))]
public subInfo2 SubInfo2
{
get { return _sub2; }
set { _sub2 = value; }
}
public info()
{
this._id = 0;
this._name = "info";
this._resultMarkPos.x = 0;
this._resultMarkPos.y = 0;
this._sub1 = new subInfo1
{
Id = 11,
Name = "sub11",
};
this._sub2 = new subInfo2
{
Id = 22,
Name = "sub22",
};
}
}
public class subInfo1
{
private int _id;
public int Id
{
get { return _id; }
set { _id = value; }
}
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public subInfo1()
{
this._id = 0;
this._name = "sub1";
}
}
public class subInfo2
{
private int _id;
public int Id
{
get { return _id; }
set { _id = value; }
}
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public subInfo2()
{
this._id = 0;
this._name = "sub2";
}
}
}
編輯但是,struct case對[TypeConverter(typeof(ExpandableObjectConverter))]屬性沒有影響。 你有什么主意嗎 ?
private DoublePoint _resultMarkPos;
[CategoryAttribute("Results")]
[TypeConverter(typeof(ExpandableObjectConverter))]
public DoublePoint ResultMarkPos
{
get { return _resultMarkPos; }
set { _resultMarkPos = value; }
}
public struct DoublePoint
{
public double x, y;
}
你需要使用TypeConverter:
private subInfo1 _sub1;
[CategoryAttribute("SubInfo")]
[TypeConverter(typeof(ExpandableObjectConverter))]
public subInfo1 SubInfo1
{
get { return _sub1; }
set { _sub1 = value; }
}
private subInfo2 _sub2;
[CategoryAttribute("SubInfo2")]
[TypeConverter(typeof(ExpandableObjectConverter))]
public subInfo2 SubInfo2
{
get { return _sub2; }
set { _sub2 = value; }
}
你的代碼很好,但你只是忘了你的類聲明中的一小部分額外信息: public class MyClass : ExpandableObjectConverter
。
這是一個非常基本的用法類:
[TypeConverter(typeof(ExpandableObjectConverter))]
public class info : ExpandableObjectConverter
{
private int _id;
public int Id
{
get { return _id; }
set { _id = value; }
}
}
下次不要忘記那部分......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.