アクセス数 累計:000,124,986 昨日:000,000,099 本日:000,000,008
|
|
|
|
【Amazon ランキング:本 - ゲーム攻略・ゲームブック】
|
|
前回までは、int、string 等の.NET 標準のオブジェクトをプロパティ化してきましが、今回は自分でデザインしたオブジェクトをプロパティグリッドに表示してみることにします。
オブジェクトをプロパティにしてグリッドで表示すると、そのメンバが階層になって表示されて[+][-]で閉じたり開いたりできます。
プロパティの階層を開いている場合は対象のオブジェクトのメンバがすべて参照できるのですが、閉じている場合は ToString() により文字列変換された値がプロパティグリッドに表示されることになります。 |
|
独自クラスの作成 |
説明は後にしてまずはプロパティグリッドに表示するクラスを作成します。
今回は DateTime型の[BirthDay] と String型の[Name] の2つのメンバを持つクラスを作成することにします。
|
VB[Class2.vb] |
<System.ComponentModel.TypeConverter( _ GetType(System.ComponentModel.ExpandableObjectConverter))> _
Public Class Class2
' クラスメンバ変数
Private _birthday As DateTime = Now
Private _name As String = "SuraSura"
' 誕生日プロパティ
<System.ComponentModel.Category("すらすら")> _
<System.ComponentModel.Description("誕生日")> _
Public Property BirthDay() As String
Get
Return _birthday
End Get
Set(ByVal value As String)
_birthday = value
End Set
End Property
' 名前プロパティ
<System.ComponentModel.Category("すらすら")> _
<System.ComponentModel.Description("名前")> _
Public Property Name() As String
Get
Return _name
End Get
Set(ByVal value As String)
_name = value
End Set
End Property
' 文字列の取得
Public Overrides Function ToString() As String
Return String.Format("{0:yyyy/MM/dd},{1}", _birthday, _name)
End Function
End Class
|
|
C#[Class2.cs] |
using System;
using System.Collections.Generic;
using System.Text;
namespace PropatyGrid_CS
{
[System.ComponentModel.TypeConverter(
typeof(System.ComponentModel.ExpandableObjectConverter))]
class Class2
{
// クラスメンバ変数
private DateTime _birthday = DateTime.Now;
private string _name = "すらすら";
// 誕生日プロパティ
public DateTime Birthday
{
get { return _birthday; }
set { _birthday = value; }
}
// 名前プロパティ
public string Name
{
get { return _name; }
set { _name = value; }
}
// 文字列の取得
public override string ToString()
{
return string.Format("{0:yyyy/MM/dd},{1}", _birthday, _name);
}
}
}
|
|
このクラスで重要な点は2つあります。1つはクラスの上についている[System.ComponentModel.TypeConverte]属性です。
この属性でタイプをて指定することによってプロパティグリットと値のやり取りをできるようになります。
[VB]
<System.ComponentModel.TypeConverter( _ GetType(System.ComponentModel.ExpandableObjectConverter))>
[C#]
[System.ComponentModel.TypeConverter( typeof(System.ComponentModel.ExpandableObjectConverter))]
ここでタイプとして指定してる[System.ComponentModel.ExpandableObjectConverte]はどんなクラスでも汎用的に使用できます。
また、このクラスから派生させて独自の変換ルールをもったコンバーターも作成できます。 |
2つめは ToString() メソッドをオーバーライドしている点です。プロパティの階層が閉じられている場合は ToStirng()メソッドによって文字列形式で表現された値をプロパティグリッドの項目として表示します。
[VB]
Public Overrides Function ToString() As String
Return String.Format("{0:yyyy/MM/dd},{1}", _birthday, _name)
End Function
[C#]
public override string ToString()
{
return string.Format("{0:yyyy/MM/dd},{1}", _birthday, _name);
}
|
次は上記で作成した Class2 をメンバにもった Class3 を作成するわけですが、特に特殊なことは必要ありません。
普通に Class2 のプロパティを作成するだけで完成です。 |
VB[Class3.vb] |
Public Class Class3
' クラスメンバ変数
Private _class2 As Class2 = New Class2()
' Class2値プロパティ
<System.ComponentModel.Category("すらすら")> _
<System.ComponentModel.Description("Class2 値のプロパティ")> _
Public Property Class2Value() As Class2
Get
Return _class2
End Get
Set(ByVal value As Class2)
_class2 = value
End Set
End Property
End Class
|
|
C#[Class3.cs] |
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
namespace PropatyGrid_CS
{
public class Class3
{
// クラスメンバ変数
private Class2 _class2 = new Class2();
// Class2値プロパティ
[System.ComponentModel.Category("すらすら")]
[System.ComponentModel.Description("Class2値プロパティ")]
public Class2 Class2Value
{
get { return _class2; }
set { _class2 = value; }
}
}
}
|
|
|
※このページで紹介しているサンプルコードについて管理者は動作保障をいたしません※
※サンプルコードを使用する場合は、自己責任でお願いします※
|
【楽天 ランキング:スマートフォン】
|
|
|
|
このサイトはフリーソフトのMerge HTMLで作成されています。
このサイトはリンクフリーです。
|
ページの先頭に戻る |
Copyright© 2010-2015 Jun.Shiozaki All rights reserved. |
|
|
|