現在VB6.0で開発を行っております。
ユーザーコントロールを複数作成しているのですが、
ある端末からプロジェクトを開くと正しく読み込まれるのですが、
別の端末からまったく同じプロジェクトを開こうとすると、
「クラス Class名(コントロール コントロール名) はロードされていません。」
というエラーがログに書き出され、ユーザーコントロールが読み込まれていないため、
当該フィールドがPictureBoxに置き換わってしまっています。
同じ端末でもプロジェクトによっては同じユーザーコントロールが読み込めたり、
読み込めなかったりで混乱してしまっております。
上記エラーが端末の設定によるものなのか、ファイル等の問題なのかも想像がつかず、
大変困っております。恐縮ではありますが、ご存知の方がいらっしゃいましたら
対応方法等ご教授いただけませんでしょうか。
コントロールの参照に失敗した場合、そのコントロールは
PictureBoxに置き換えてロードされます。
この場合は、OCXにコンパイルしてから利用してみてください。
そうすれば、参照設定さえ行われていれば、正しく読み込まれます。
もし、UserControlのまま使うのであれば、以下の事に注してください。
1) まず、ユーザーコントロールの存在するパスに気をつけてください。
このパスに付いては、vbpファイルの「UserControl=」行を見るとわかります。
その内容が「絶対パス指定」になっているか、「ファイル名のみ」なのか、
または「相対パス指定」になっているのかを確認し、実行端末におけるそのパスに、
ユーザーコントロールがあるかどうかを確認してみてください。
パスが違っていた場合、ユーザーコントロールの読込に失敗するため、
それらを使っていたフォーム全てで、「ロードされていません」という
エラーが発生する事になります。
もし、パスの違いによるエラーが発生した場合は、そのUserControlを
使用しているフォームをすべて解放してから、手動でUserControlを
プロジェクトに追加してください。その後で、先ほど解放したフォームを
順次追加しなおしていけば、PictureBoxに化けることなく読み込まれるでしょう。
2) また、「ユーザーコントロールを使ったフォーム」を、別のプロジェクトで
流用しようとした場合などにも、コントロールを読み込めない事があります。
例えば、標準EXEプロジェクト「SampleProject」を作成し、
そこに UserControl 「SampleControl」を作成しておいたとします。
この場合、フォームが利用するコントロールは、
「SampleProject.SampleControl」という内部名になります。
(*.frmファイルをメモ帳で開くと、このような記述が見つかるかと思います)
そして、別のプロジェクト——例えば、Project1——を作成し、ここに
先ほどの「SampleControl」を追加して、利用するとします。
この場合、フォームが利用するコントロールの内部名は、
「Project1.SampleControl」となります。同じユーザーコントロールでも、
プロジェクトが異なれば、内部名は変化してしまうわけです。
(OCXにコンパイルされたコントロールの場合は、内部名は変化しません)
内部名が異なるため、もし、先ほどのSampleProjectプロジェクトで
使っていたフォームを、このProject1プロジェクトに追加しようとすると、
コントロールの内部名が異なっているため、コントロールを見つける事ができず、
PictureBoxに置き換えてロードされる事になります。
解決しました!
どうもありがとうございます。
OCXを読みに行くパスがベタ打ちしてある部分があったのが
原因でした。
ツイート | ![]() |