- PR -

VB.NET2003 プロパティの作成方法

投稿者投稿内容
yamayama
ベテラン
会議室デビュー日: 2006/02/10
投稿数: 68
投稿日時: 2006-03-07 16:10
引用:
--------------------------------------------------------------------------------

じゃんぬねっとさんの書き込み (投稿日時: 2006-03-07 15:28) より:

--------------------------------------------------------------------------------

 おっしゃられた通り、
色々と試してみたら何とか作成することができました。
ありがとうございました。

また、機会がありましたらよろしくお願いします。

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-07 16:36
引用:

yamayamaさんの書き込み (2006-03-07 16:10) より:

おっしゃられた通り、
色々と試してみたら何とか作成することができました。
ありがとうございました。
また、機会がありましたらよろしくお願いします。


作成できたのであれば、ここにフィードバックをしてください。
yamayama さんのフィードバックが、同じ悩みを持つ第三者の手助けになります。

また、まずい点がないかの確認もできます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
yamayama
ベテラン
会議室デビュー日: 2006/02/10
投稿数: 68
投稿日時: 2006-03-07 17:18
サンプルコードを乗せてみました。
実はこれでうまくいったと思ったのですが、
myMembers→格納するための変数に
値が代入されていないことが分かりました。

Public Class myControl
Private myMembers As MyMemberCollection
Public Property Members() As MyMemberCollection
Get
Return myMembers
End Get
Set(ByVal Value As MyMemberCollection)
myMembers = Value
End Set
End Property
End Class

#Region "MyMemberクラス"

Public Class MyMember

#Region "インスタンス変数"
Private myMemberName As String
Private myByteSize As Integer
Private myPenColor As Color
#End Region

#Region "プロパティ"

#Region "Public Property MemberName() As String"
Public Property MemberName() As String
Get
Return myMemberName
End Get
Set(ByVal Value As String)
myMemberName = Value
End Set
End Property
#End Region

#Region "Public Property ByteSize() As Integer"
Public Property ByteSize() As Integer
Get
Return myByteSize
End Get
Set(ByVal Value As Integer)
myByteSize = Value
End Set
End Property
#End Region

#Region "Public Property PenColor() As Color"
<Description(CATEGORY_DESCRIPTION), _
Category(CATEGORY_ITEM)> _
Public Property PenColor() As Color
Get
Return (Me.myPenColor)
End Get
Set(ByVal Value As Color)
Me.myPenColor = Value
End Set
End Property
#End Region

#End Region

End Class

#End Region

#Region "MyMemberCollectionクラス"

Public Class MyMemberCollection
Inherits System.Collections.ArrayList
Default Public Shadows Property Item(ByVal Index As Integer) As MyMember
Get
Return DirectCast(MyBase.Item(Index), MyMember)
End Get
Set(ByVal Value As MyMember)
MyBase.Item(Index) = DirectCast(Value, MyMember)
End Set
End Property
End Class
#End Region

コントロールのプロパティには
Membersプロパティが表示され、
ダイアログを表示し値を入力することまではできるのですが、
変数への値の格納ができていないようです。
理由がよくわからないのですが、何か間違いがあるのでしょうか?

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-07 17:32
引用:

yamayamaさんの書き込み (2006-03-07 17:18) より:

コントロールのプロパティにはMembersプロパティが表示され、
ダイアログを表示し値を入力することまではできるのですが、
変数への値の格納ができていないようです。
理由がよくわからないのですが、何か間違いがあるのでしょうか?


DesignerSerializationVisibility 属性が必要です。
それと、AddRange メソッド、Or IComponent の実装。
どちらでも良かったかな...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
うにくま
ベテラン
会議室デビュー日: 2005/11/05
投稿数: 82
投稿日時: 2006-03-07 17:43
本題とは関係ありませんが、
コードの載せる場合はCODEタグを使用すると見やすくなります。([CODE][/CODE]で囲む)

こんな感じに表示されます。

コード:
Public Class myControl
    Private myMembers As MyMemberCollection
    Public Property Members() As MyMemberCollection
        Get
            Return myMembers
        End Get
        Set(ByVal Value As MyMemberCollection)
            myMembers = Value
        End Set
    End Property
End Class

#Region "MyMemberクラス"

Public Class MyMember

#Region "インスタンス変数"
    Private myMemberName As String
    Private myByteSize As Integer
    Private myPenColor As Color
#End Region

#Region "プロパティ"

#Region "Public Property MemberName() As String"
    Public Property MemberName() As String
        Get
            Return myMemberName
        End Get
        Set(ByVal Value As String)
            myMemberName = Value
        End Set
    End Property
#End Region

#Region "Public Property ByteSize() As Integer"
    Public Property ByteSize() As Integer
        Get
            Return myByteSize
        End Get
        Set(ByVal Value As Integer)
            myByteSize = Value
        End Set
    End Property
#End Region

#Region "Public Property PenColor() As Color"
    <Description(CATEGORY_DESCRIPTION), _
    Category(CATEGORY_ITEM)> _
    Public Property PenColor() As Color
        Get
            Return (Me.myPenColor)
        End Get
        Set(ByVal Value As Color)
            Me.myPenColor = Value
        End Set
    End Property
#End Region

#End Region

End Class

#End Region

#Region "MyMemberCollectionクラス"

Public Class MyMemberCollection
    Inherits System.Collections.ArrayList
    Default Public Shadows Property Item(ByVal Index As Integer) As MyMember
        Get
            Return DirectCast(MyBase.Item(Index), MyMember)
        End Get
        Set(ByVal Value As MyMember)
            MyBase.Item(Index) = DirectCast(Value, MyMember)
        End Set
    End Property
End Class
#End Region

yamayama
ベテラン
会議室デビュー日: 2006/02/10
投稿数: 68
投稿日時: 2006-03-07 20:28
引用:----------------------------------------------------------------------
うにくまさんの書き込み (投稿日時: 2006-03-07 17:43) 
-------------------------------------------------------------------------
ご指摘ありがとうございました。
こういう記述方法があることをしりませんでした。_(--)_

引用:-------------------------------------------------------------------
じゃんぬねっとさんの書き込み(投稿日時: 2006-03-07 17:32)

AddRange メソッド、Or IComponent の実装
-----------------------------------------------------------------------

DesignerSerializationVisibility 属性についてはなんとなく理解できましたが
後述のAddRange メソッド、Or IComponent の実装については
色々と調べてみたのですが、
どうやっていいか分かりません。
どこか、関連サイトなどご教授願えないでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-08 11:19
引用:

yamayamaさんの書き込み (2006-03-07 20:28) より:

引用:--------------------------------------------------------------


引用も [code] と同じく [quote] を使うことで可能です。

引用:

DesignerSerializationVisibility 属性についてはなんとなく理解できましたが
後述のAddRange メソッド、Or IComponent の実装については色々と調べてみたのですが、
どうやっていいか分かりません。
どこか、関連サイトなどご教授願えないでしょうか?


あまりないものなんですね...

  Collection Editor

上記を参考にする場合は、こちらの Lady.BUG さんの投稿も見た方が良いです。
(私も宇宙仮面さんと同様にハマっていましたので)

  Windowsユーザーコントロールにコレクションプロパティを追加したい

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
yamayama
ベテラン
会議室デビュー日: 2006/02/10
投稿数: 68
投稿日時: 2006-03-08 14:16
いろいろと親切にご教授いただきありがとうございました。
詳細な動作確認等してはいないのですが
こんな感じで、作成することができました。

コード:
Public Class myControl
    Inherits System.Windows.Forms.ComboBox

    'この部分をつけたした場合、うまく動作する事が分かりました。●●●●●●●●
    Private components As System.ComponentModel.Container = Nothing
        
    Private Sub InitializeComponent()
        components = New System.ComponentModel.Container
    End Sub
    
#Region "コンストラクタ"
    Public Sub New(ByVal container As System.ComponentModel.IContainer)
        MyBase.new()
        container.Add(Me)
        InitializeComponent()
        myMembers = New MyMemberCollection
    End Sub

    Public Sub New()
        InitializeComponent()
        myMembers = New MyMemberCollection
    End Sub
#End Region
    'ここまで●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
    
    Private myMembers As MyMemberCollection
    Public Property Members() As MyMemberCollection
        Get
            Return myMembers
        End Get
        Set(ByVal Value As MyMemberCollection)
            myMembers = Value
        End Set
    End Property
End Class

#Region "MyMemberクラス"

Public Class MyMember

#Region "インスタンス変数"
    Private myMemberName As String
    Private myByteSize As Integer
    Private myPenColor As Color
#End Region

#Region "プロパティ"

#Region "Public Property MemberName() As String"
    Public Property MemberName() As String
        Get
            Return myMemberName
        End Get
        Set(ByVal Value As String)
            myMemberName = Value
        End Set
    End Property
#End Region

#Region "Public Property ByteSize() As Integer"
    Public Property ByteSize() As Integer
        Get
            Return myByteSize
        End Get
        Set(ByVal Value As Integer)
            myByteSize = Value
        End Set
    End Property
#End Region

#Region "Public Property PenColor() As Color"
    Public Property PenColor() As Color
        Get
            Return (Me.myPenColor)
        End Get
        Set(ByVal Value As Color)
            Me.myPenColor = Value
        End Set
    End Property
#End Region

#End Region

End Class

#End Region

#Region "MyMemberCollectionクラス"

Public Class MyMemberCollection
    Inherits System.Collections.ArrayList
    Default Public Shadows Property Item(ByVal Index As Integer) As MyMember
        Get
            Return DirectCast(MyBase.Item(Index), MyMember)
        End Get
        Set(ByVal Value As MyMember)
            MyBase.Item(Index) = DirectCast(Value, MyMember)
        End Set
    End Property
End Class
#End Region




何かおかしな点などございましたら
ご指摘のほどよろしくお願いします。


スキルアップ/キャリアアップ(JOB@IT)