- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-03-08 14:26
引用: |
|
yamayamaさんの書き込み (2006-03-08 14:16) より:
何かおかしな点などございましたら
ご指摘のほどよろしくお願いします。
|
これでは永続的に保持されないと思います。
コレクション エディタで Members にアイテムを加えてから、
デザイナを閉じ、再度デザイナを表示して Members プロパティの中身を確認してみてください。
保持されていないかと思います。
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- yamayama
- ベテラン
- 会議室デビュー日: 2006/02/10
- 投稿数: 68
|
投稿日時: 2006-03-08 15:08
引用: |
|
じゃんぬねっとさんの書き込み(投稿日時: 2006-03-08 14:26)
コレクション エディタで Members にアイテムを加えてから、
デザイナを閉じ、再度デザイナを表示して Members プロパティの中身を確認してみてください。
|
(コレクション エディタで Members にアイテムを加えてから、
デザイナを閉じ、再度デザイナを表示して Members プロパティの中身を確認)
この場合は値が保持されているのですが、
プロジェクトを立ち上げなおすと値がクリアされていることが
分かりました。
MyMemberCollectionクラスに
コード: |
|
Public Overloads Sub AddRange(ByVal obj() As Object)
MyBase.AddRange(obj)
End Sub
|
を追加してもうまくいきません。
他に理由があるのでしょうか?
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-03-08 15:16
引用: |
|
yamayamaさんの書き込み (2006-03-08 15:08) より:
(コレクション エディタで Members にアイテムを加えてから、
デザイナを閉じ、再度デザイナを表示して Members プロパティの中身を確認)
この場合は値が保持されているのですが、
プロジェクトを立ち上げなおすと値がクリアされていることが分かりました。
|
デザイナを閉じてしまえば、すぐメモリから消え去りそうですが...
本題じゃないのでどうでも良いことですね。
引用: |
|
を追加してもうまくいきません。
他に理由があるのでしょうか?
|
値を保持するための機構がないように思えます。
そのひとつが「DesignerSerializationVisibility 属性」だったのですが...
引用: |
|
DesignerSerializationVisibility 属性についてはなんとなく理解できましたが
|
と、仰ってましたけども、出来上がったソースを見る限り含まれていません。
それとも、何か異なる方法を発見して試そうとしたのでしょうか?
# リンク先は読まれましたよね?
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- yamayama
- ベテラン
- 会議室デビュー日: 2006/02/10
- 投稿数: 68
|
投稿日時: 2006-03-08 15:41
引用: |
|
じゃんぬねっとさんの書き込み(投稿日時: 2006-03-08 15:16)
|
すみません。コードを抜粋したため、コードの記述を削除してました。_(--)_
DesignerSerializationVisibility 属性はこちらのコードには、
は挿入しております。
この場合に、
プロジェクトを立ち上げなおすと値がクリアされてしまいます。
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-03-08 16:05
引用: |
|
yamayamaさんの書き込み (2006-03-08 15:41) より:
すみません。コードを抜粋したため、コードの記述を削除してました。_(--)_
DesignerSerializationVisibility 属性はこちらのコードには、は挿入しております。
|
それはよろしいのですが、肝心な属性が "どのメンバについているのか" がわからないですよね。
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- yamayama
- ベテラン
- 会議室デビュー日: 2006/02/10
- 投稿数: 68
|
投稿日時: 2006-03-08 16:37
あらためてコードを記述させていただきます。
MyMemberCollection部分に属性を付加しています。
コード: |
|
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
'★★★★★この部分に属性付加★★★★★★★★★★★★★★★★★★★★★★★★★
<DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _
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 "プロパティ"
<DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _
#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
|
上記の様になっております。
よろしくお願いします。
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-03-09 14:49
引用: |
|
yamayamaさんの書き込み (2006-03-08 16:37) より:
あらためてコードを記述させていただきます。
MyMemberCollection部分に属性を付加しています。
|
このコードだとコンパイル自体が通らなかったので、いくつか訂正して検証しました。
引用: |
|
Public Class MyMember
|
バイナリ シリアライズするのであれば、System.Serializable 属性が必要です。
おそらく、これで保持はできるようになるでしょう。
引用: |
|
<DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _
Public Property MemberName() As String
|
ここに属性は必要ないと思います。
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|
- じゃんぬねっと
- ぬし
- 会議室デビュー日: 2004/12/22
- 投稿数: 7811
- お住まい・勤務地: 愛知県名古屋市
|
投稿日時: 2006-03-09 14:56
付け足しです。
引用: |
|
yamayamaさんの書き込み (2006-03-08 16:37) より:
Public Class MyMemberCollection
|
こちらのコレクション クラスに MyMember の配列を引数とした AddRange メソッドを実装すると、
InitializeComponent メソッドで自動生成されるコードに AddRange メソッドが使われるようになります。
AddRange メソッドの方がパフォーマンスが良かったり、1 行で書いてくれたりという利点があります。
まあ、それを抜きにしても、コード側から利用するにおいて便利なので実装した方が良いでしょう。
_________________ C# と VB.NET の入門サイト
じゃんぬねっと日誌
|