すらすらプログラマーへのお問い合わせ
すらすらのブログ
アクセス数  累計:000,102,645  昨日:000,000,131  本日:000,000,027
Loading
プロパティグリッド
.NET プログラミング
プロパティグリッド
印刷
リストボックス
スレッド
リストビュー
インストーラー
やってみよう!

できるVisual Studio 2015 Windows /Android/iOS アプリ対応

独習C# 第3版

VisualBasic2013パーフェクトマスター (Perfect Master SERIES)

プログラミング.NET Framework 第4版 (Microsoft Press)

VisualBasic2013逆引き大全555の極意

猫でもわかるWindowsプログラミング 第4版 (猫でもわかるプログラミング)

VisualC#2013逆引き大全555の極意

独自クラスのプロパティ化 最終更新:2010/07/22
【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.