| 
				
				
				
				
				
				
				
				
				
				 
					アクセス数  累計:000,156,133  昨日:000,000,103  本日:000,000,074
				 
				
				
			 | 
		 
	 
					
				 | 
			
			
				| 
					
				 | 
			
			
				| 
					
					
					
					
					
					
					
				 | 
				
					
					
						
							
						 
						
							| 
								 	【Amazon ランキング:本 - コンピュータ・IT】 
								 
							 | 
						 
						
							
								
									
	
		
			
				
					  | 
					前回までは、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. | 
									 
								 
							 | 
						 
						
							| 
							 | 
						 
					 
				 |