none
カスタムコントロールを修正すると、その部品を貼り付けているFormのデザインを開くとエラーとなり編集できない RRS feed

  • 質問

  • VB.net 2015での開発となります。

    Formアプリケーションを作成するにあたり、

    カスタムコントロールを作成してDLL化して利用しております。

    Formに貼り付けて利用することはできているのですが、

    カスタムコントロールを修正して、DLLを作成し直すと

    既にFormに貼り付けている部品のResxから読み込むリソースでエラーとなってしまいます。

    DLLの修正を行っても、リソースが正しく読めるためには、

    どのような方法があるでしょうか?

    XML化できないかと思い、いろいろ試してますが、

    結局バイナリシリアライズ化されてしまい、うまくいきません。。。


    2017年3月1日 3:07

すべての返信

  • 前スレッドで解決と書かれているのですが、その続きになるのではないですか?。 乱立は避けた方が良いと思います。

    2017年3月1日 4:22
  • AssemblyInfo.vbを修正してVersionの固定化は行って

    単に再ビルドしてDLLを更新した場合についてのエラーは解決しました。

    今回は、対象のカスタムコントロールを修正してVersionを更新すると

    Resxのデータが読めなくなる現象が残っております。

    Designer.dbと同時に生成されるresxには、Base64でバイナリ化されたデータが格納されますので

    これをXML文字列化できれば、解決できるのではないか?と考えて質問させて頂いた次第です。

    Versionが違うという意味では、原因の根本が同じというご指摘でしょうか?

    • 編集済み ijies710 2017年3月1日 4:35
    2017年3月1日 4:27
  • 私の見当違いなら、お許し下さい。

    プロパティを持つユーザーコントロールと言う事であれば、
    https://msdn.microsoft.com/ja-jp/library/cc437677(v=vs.71).aspx
    辺りが参考になりませんか?。 古いですが。
    ユーザーコントロール プロパティ で検索すれば色々と出て来ます。

    2017年3月1日 5:24
  • すみません。ご教授頂いたページは参照させて頂いております。
    説明を追記します。
    ユーザコントロールのプロパティとして独自クラスを設定しております。
    この独自クラスに、List(Of T)クラスのプロパティを持っており、
    そのリストの構成要素も独自クラスです。
    このユーザコントロールのプロパティを、デザインで編集して
    保存、表示、再編集できることは確認済です。
    ただ、リストの構成要素に対して修正を行った場合に
    最初に作成されたFormに貼られたユーザコントロールのリソースを読むときに
    エラーが発生する現象が発生します。
    リソースを削除して、再度部品を貼りなおせば解消されるのですが、
    これから画面を大量に作成してデバッグする必要があるため
    部品のバグを改修するたびに、全てのリソースを作成しなおすのは厳しいので
    XML化されていれば、バージョンUPにも耐えられるのではないか、と思って調べておりました。

    下記のような情報もありましたが、Publicメンバーには適用できるのですが
    プロパティには適用できないようでした。
    https://msdn.microsoft.com/ja-jp/library/ms229752%28v=vs.120%29.aspx?f=255&MSPPError=-2147217396

    全て、Publicメンバーにすることでできるのかもしれません。
    (現在トライ中です)


    2017年3月1日 5:42
  • XML化 で発想するのは、 My.Setting の利用です。 コードを書く必要がありますが、List(Of T) をこれに加えてしまっては如何ですか?。
    2017年3月1日 6:06
  • ご教授ありがとうございます。

    XMLシリアライズの処理は作成できているのですが

    デザイン時にどう処理を走らせたものかと。

    Seraliseを付与して、ISerializerをImplementすれば

    GetObjectDataが走るので、そのタイミングで処理は呼べるのですが、

    これが走ると、結局バイナリのシリアライズリソースはできてしまうので

    結局根本の解決にならず。。。

    IDesignerSerializationProviderを継承したクラスを作ってできないものかと調査中です。

    2017年3月1日 7:30
  • 最初の目的とは異なりますが、
    <Serializable>を使うのではなく、
    クラスに<DataContract>
    シリアライズするメンバーに<DataMember>
    をそれぞれ付与してやることで、
    Designers.vbに、ソースコードとして生成され
    resxに、バイナリシリアライズされませんでしたので
    こちらで対応できることがわかりました。

    ありがとうございました。

    解決致しました。


    2017年3月1日 8:18