「クラス Class名(コントロール コントロール名) はロードされていません。」というエラーを解決するには。

解決


BTO  2003-08-10 05:02:29  No: 78959

現在VB6.0で開発を行っております。

ユーザーコントロールを複数作成しているのですが、
ある端末からプロジェクトを開くと正しく読み込まれるのですが、
別の端末からまったく同じプロジェクトを開こうとすると、

「クラス Class名(コントロール コントロール名) はロードされていません。」

というエラーがログに書き出され、ユーザーコントロールが読み込まれていないため、
当該フィールドがPictureBoxに置き換わってしまっています。

同じ端末でもプロジェクトによっては同じユーザーコントロールが読み込めたり、
読み込めなかったりで混乱してしまっております。

上記エラーが端末の設定によるものなのか、ファイル等の問題なのかも想像がつかず、
大変困っております。恐縮ではありますが、ご存知の方がいらっしゃいましたら
対応方法等ご教授いただけませんでしょうか。


魔界の仮面弁士  2003-08-10 10:06:39  No: 78960

コントロールの参照に失敗した場合、そのコントロールは
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に置き換えてロードされる事になります。


BTO  2003-08-24 08:01:16  No: 78961

解決しました!
どうもありがとうございます。

OCXを読みに行くパスがベタ打ちしてある部分があったのが
原因でした。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加