- 題名: クラスの配列をプロパティとして持ちたい
- 日時: 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