- 題名: クラスの配列をプロパティとして持ちたい
- 日時: 2003/10/17 10:01:19
- ID: 969
- この記事の返信元:
- (なし)
- この記事への返信:
- [974] Re[1]: クラスの配列をプロパティとして持ちたい2003/10/17 15:47:37
- ツリーを表示
■No982に返信(Nicolasさんの記事)
体調崩してました。すみません。
> と言った手順です。
> 本来、親フォームに貼り付けてからプロパティを変更すると親フォーム内で、Locationとか、TabIndexとか、Nameなどと同様に追記されないとおかしいのですが、ここに変更されないのが今回の問題なのです。
そもそも配列のプロパティは、標準では表示されません。
独自でプロパティエディタをOverrideする必要があります。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/mwdesign/html/mwdlgpropertyoverrides.asp
それ以外としてはIndex自体を、別のプロパティにしちゃうってのも
手かも知れません。お勧めしませんが(--;
Private _members() As aMember = {New aMember, New aMember}
Public Property Members As aMember
Get
Return _members(_membersIndex)
End Get
Set(ByVal Value As aMember)
_members(_membersIndex) = Value
End Set
End Property
Private _membersIndex As Integer
Public Property MemberIndex As Integer
Get
Return _membersIndex
End Get
Set(ByVal Value As Integer)
_membersIndex = Value
End Set
End Property
2003/10/23(Thu) 18:10:18 編集(投稿者)
どらごらです。
System.Collections.ArrayListから派生させてみました。
確かにこれだと、プロパティダイアログ要らないんですね。
僕も参考になりました。
-----
Public Class UserControl1
Inherits System.Windows.Forms.UserControl
#Region " Windows フォーム デザイナで生成されたコード "
...
#End Region
'プロパティ
Private FMembers As MyMemberCollection
Public Property Members() As MyMemberCollection
Get
Return FMembers
End Get
Set(ByVal Value As MyMemberCollection)
FMembers = Value
End Set
End Property
End Class
Public Class MyMember
'***プロパティ
'DataGrid
Private FDataGrid As System.Windows.Forms.DataGrid
Public Property DataGrid() As System.Windows.Forms.DataGrid
Get
Return FDataGrid
End Get
Set(ByVal Value As System.Windows.Forms.DataGrid)
FDataGrid = Value
End Set
End Property
'String
Private FStr As String
Public Property Str() As String
Get
Return FStr
End Get
Set(ByVal Value As String)
FStr = Value
End Set
End Property
'Integer
Private FInt As Integer
Public Property Int() As Integer
Get
Return FInt
End Get
Set(ByVal Value As Integer)
FInt = Value
End Set
End Property
Public Sub New()
FDataGrid = New System.Windows.Forms.DataGrid
End Sub
Protected Overrides Sub Finalize()
FDataGrid = Nothing
MyBase.Finalize()
End Sub
End Class
Public Class MyMemberCollection
Inherits System.Collections.ArrayList
Default Public Shadows Property Item(ByVal Index As Integer) As MyMember
Get
Return MyBase.Item(Index)
End Get
Set(ByVal Value As MyMember)
MyBase.Item(Index) = Value
End Set
End Property
End Class
Nicolasです。いつも参考にさせていただいております。
不躾ながら早速質問させていただきます。
WindowsApplicationでWindowsFormクラスを継承して使いやすいクラスを作成しています。
継承クラスにプロパティ項目としてString型とInteger型をひとかたまりにしたクラスを追加したいのですが、項目数が動的に変化するため、配列としてプロパティに追加したいのです。
例で言うと、DataGridクラスで、
列名、列幅をプロパティとして持つクラスを作り
列数は変更することがあるので、このクラスを配列にする。
配列にした物を、継承クラスのプロパティとして追加する。
と言った感じです。
ライブラリにした後、Formに追加でき、デザインビューでプロパティを見ると項目は追加されており、配列にもなっています。(追加したり変更したりできる。)
問題は、プロパティを変更後、親Formのコードを見ると、値が変更されていない為、読み取りできずにいます。
具体的には、(子)MyDataGrid クラスを作成し、これを(親)Formに追加する。
追加された(子)MyDataGridのプロパティをデザイナで変更する。
ここで、(親)Formのコード内でMe.MyDataGrid.Members
のプロパティが変更されていない。
ほかのプロパティは変更できるのでクラスの配列の追加方法に問題があると思われます。
コードの一部ですが以下の物です。
Setの仕方が悪いのはわかっているのですが、どう追加したらいいのかわからずに困っていますので案のある方、ご教授お願いいたします。
-------以下コード--------------
Public Class MyDataGrid
Inherits DataGrid
:
:
Public Class aMember
Private _str As String
Private _int As Integer
Sub New()
MyBase.new()
End Sub
Public Property STR() As String
Get
Return _str
End Get
Set(ByVal Value As String)
_str = Value
End Set
End Property
Public Property INT() As Integer
Get
Return _int
End Get
Set(ByVal Value As Integer)
_int = Value
End Set
End Property
End Class
Private _members() As aMember = {New aMember, New aMember}
Public Property Members() As aMember()
Get
Return _members
End Get
Set(ByVal Value As aMember())
_members = Value
End Set
End Property
:
:
End Class 'MyDataGrid