- PR -

自作コントロールのシリアライズ

投稿者投稿内容
めだか
大ベテラン
会議室デビュー日: 2004/11/11
投稿数: 109
投稿日時: 2006-03-14 16:46
<XP Pro VB.NET2003>

UserControlを継承し自作のコントロールを作りました。
単体での動作は問題ないのですが、別に開いているソリューションに貼り付けようと
すると、
「オブジェクトのシリアル化を解除する状態が不足しています。
他の情報が不足しています。」
というエラーメッセージが出力されます。

クラス宣言は下記のようにしています。

<Description("PF拡張"), Serializable()> _
Public Class PF
Inherits System.Windows.Forms.UserControl

シリアライズ、デシリアライズを自前で作らないといけないのでしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-14 17:33
引用:

めだかさんの書き込み (2006-03-14 16:46) より:

UserControlを継承し自作のコントロールを作りました。
単体での動作は問題ないのですが、別に開いているソリューションに貼り付けようと
すると、
「オブジェクトのシリアル化を解除する状態が不足しています。他の情報が不足しています。」
というエラーメッセージが出力されます。


どうやって貼り付けようとしましたか?
ツールボックス以外から貼り付けようとしましたか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-14 17:40
あ、そもそも、基底クラスがシリアライズ可能でないと、
SerializationException が発生するような気がします。
と思ったのですが、MarshalByRefObject でSerializableAttribute 属性がついてましたね... orz

ところで、そのクラスに静的メンバは含まれていますか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
めだか
大ベテラン
会議室デビュー日: 2004/11/11
投稿数: 109
投稿日時: 2006-03-14 18:19
>ツールボックス以外から貼り付けようとしましたか?
そうです。コピー元のソリューションでCTRL+C,コピー先のソリューションのFormデザイナ上でCTRL+Vです。
同一ソリューション内では問題なくコピーできます。
コピー先の参照設定はしてあります。

>ところで、そのクラスに静的メンバは含まれていますか?
含まれていません。
UserControlを継承し、中身はLabelを継承した物でプロパティとイベントを少し
いじった程度です。

カスタムコントロールでなければ別ショリューションへのコントロールのコピーは可能ですので、どうにかしてできないかと。
YAS
ベテラン
会議室デビュー日: 2006/02/15
投稿数: 59
投稿日時: 2006-03-14 22:44
コピー先で「プロジェクト」−「既存項目の追加」でコピー元のUserControl.vbを選択してもだめですか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-15 01:25
引用:

めだかさんの書き込み (2006-03-14 18:19) より:

そうです。コピー元のソリューションでCTRL+C,コピー先のソリューションのFormデザイナ上でCTRL+Vです。


おそらくこれが原因です。
デシリアライズできないんでしょうね。

そのコントロールをクラス ライブラリ化し、DLL として参照するか、
同じソリューションにプロジェクトを参加させ、プロジェクト参照することで解決するでしょう。

YAS さんの方法は、おそらくリンクによるプロジェクト参加です。
アセンブリとしては重複しますが、手っ取り早い方法のひとつです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
YAS
ベテラン
会議室デビュー日: 2006/02/15
投稿数: 59
投稿日時: 2006-03-15 02:19
引用:

YAS さんの方法は、おそらくリンクによるプロジェクト参加です。
アセンブリとしては重複しますが、手っ取り早い方法のひとつです。


「リンクによるプロジェクト参加」の意味をよく知らないのですが,
この方法ではコピー元プロジェクトのファイルの複製がコピー先の
プロジェクトのフォルダの中に作成されます。
複製の度にフォルダのあっちこっちに同じファイル名のファイルが
作られるので,どれが同じもので,どれがカスタマイズしたものか
わからなくなるのがガンです。
めだか
大ベテラン
会議室デビュー日: 2004/11/11
投稿数: 109
投稿日時: 2006-03-15 08:42
>コントロールをクラス ライブラリ化し、DLL として参照するか
この方法で解決できました。
じゃんぬねっとさん YASさんありがとうございました。

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