none
リソースを削除したらメニューが表示されなくなりました。VB2005 RRS feed

  • 質問

  • VB2005 ExpressEdition、WinXPで開発しています。

    MDIフォーム(MDIForm1.vb)にMenuStripを置いて、各メニュー(ToolStripMenuItem)を複数配置しています。
    別フォーム(子フォーム)にPictureBoxで画像を置いていましたが、不要になったのでフォームからクリア後、リソースから削除しました。

    その後しばらくして(数時間後?)にビルド時に"C:\~~\~~\***が見つかりません。"というエラーが表示されました。
    (***は数時間前に削除したイメージファイル)

    Visual Basicを再起動したところ、エラーは出なくなりましたがMDIのメニューアイテムがすべて表示されなくなりました。
    MenuStrip自体は表示されています。
    表示されないのはそこに入っていた各メニュー(ToolStripMenuItem)です。

    MDIForm1.Designer.vbを見ると、どうやら中身(ToolStripMenuItem)は残っているようです。
    各メニューはビルドしても表示されません。
    どうしたら表示されるようになるのでしょうか?

     

    2007年11月16日 5:02

回答

  •  MeCiyo さんからの引用

    MDIForm1.Designer.vbを見ると、どうやら中身(ToolStripMenuItem)は残っているようです。
    どうしたら表示されるようになるのでしょうか?

     

    たぶん、ItemsへAddRangeする部分が無いためです。

    新規フォームで最低限のものを作成して比較してみるとよいでしょう。

    2007年11月16日 6:11
  • 消えていたメニューが表示されました!

     

    MDIフォームのDesigner.vbの中にAddRangeがなかったので各メニューのそれぞれを追加しました。

    それでも表示されなかったので、更に比較したところ次のコードも無かったので追加。

     

    Me.MenuStrip1.ResumeLayout(False)
            Me.MenuStrip1.PerformLayout()

     

    すると元通りに表示されました。

    ありがとうございます。

     

    でも、どうしてこうなったか原因がわかりません。

    私なりに調べてみますが、わかるようでしたら回答をお願いします。

     

    1)OSの問題

    2)VBの問題

    3)私の操作の問題(ミス?)

    4)ハード的な問題

     

    こちらで原因がわかった時に、また報告致します。

     

    • 回答としてマーク MeCiyo 2009年2月21日 13:32
    2007年11月16日 7:03

すべての返信

  •  MeCiyo さんからの引用

    MDIForm1.Designer.vbを見ると、どうやら中身(ToolStripMenuItem)は残っているようです。
    どうしたら表示されるようになるのでしょうか?

     

    たぶん、ItemsへAddRangeする部分が無いためです。

    新規フォームで最低限のものを作成して比較してみるとよいでしょう。

    2007年11月16日 6:11
  • まどかさん回答ありがとうございます。

     

    丁度今、同じようなメニューを別フォームで作成して比較をしているときでした。

    仰る通り、AddRangeがありません。

    AddRangeを追加して表示されるかやってみます。

     

    なぜAddRangeが削除されてしまったのでしょうか?

    エラーと関係があるのしょうか。

     

    表示できましたら報告します。

    2007年11月16日 6:28
  • 消えていたメニューが表示されました!

     

    MDIフォームのDesigner.vbの中にAddRangeがなかったので各メニューのそれぞれを追加しました。

    それでも表示されなかったので、更に比較したところ次のコードも無かったので追加。

     

    Me.MenuStrip1.ResumeLayout(False)
            Me.MenuStrip1.PerformLayout()

     

    すると元通りに表示されました。

    ありがとうございます。

     

    でも、どうしてこうなったか原因がわかりません。

    私なりに調べてみますが、わかるようでしたら回答をお願いします。

     

    1)OSの問題

    2)VBの問題

    3)私の操作の問題(ミス?)

    4)ハード的な問題

     

    こちらで原因がわかった時に、また報告致します。

     

    • 回答としてマーク MeCiyo 2009年2月21日 13:32
    2007年11月16日 7:03
  • この手の話を聞いたことあるような無いような。

    私も遭遇したことがあったような。

     

    原因はわかりません。

    よくコントロールが消えたとかいう投稿がちらほら見かけるので同じことかもしれません。

     

    避けたければ、MenuStripを貼り付けるだけにして、Load等でコードで中身を構築すればよいかと思います。

    #MenuStripだけじゃないだろっていう話はありますが。
    2007年11月16日 9:05
  •  まどか さんからの引用

    この手の話を聞いたことあるような無いような。

    私も遭遇したことがあったような。

     

    ユーザーコントロールとか作ってるとしょっちゅうなります。

    私もいつもすごく困ってます。

     

    避けたければ、MenuStripを貼り付けるだけにして、Load等でコードで中身を構築すればよいかと思います。

     

    それじゃデザイナから見えないのです。

     

    誰か偉い人、何とかしてください。
    2007年11月16日 9:39
  •  れい さんからの引用

    それじゃデザイナから見えないのです。

     

    あぁ、そっか。

     

    でも、メニューならあまり見た目の要素が無いし、外枠が確保されますから。。。

    がまんがまん。

    2007年11月16日 10:55
  • れいさん、まどかさん返信ありがとうございます。

     

    いろいろ検証したところ原因がわかりましたので報告します。

    原因は、私の操作ミスでした。

     

    MyProjectのリソース表示画面で削除する前にResourceフォルダから削除してしまった事です。

    といっても、検証中、通常は参照エラーが出るだけでメニューが表示されなくなることはなかったので

    操作ミスから発生するバグかもしれません。

    断定はできませんが、特定の条件下でこの現象が発生するようです。

     

    特定の条件とは次のとおりです。

    ・プロジェクト内にフォームが二つ以上ある。

    ・フォームにメニューがある時、別フォームで今回の操作ミスを行う。

    ・メニュー(ToolStripMenuItem)にイメージを設定している。

    以上すべて必要条件です。

     

    ・・・・・・再現手順・・・・・・・・

    1)フォームを二つ作る(仮にFormAとFormB)

     

    2)FormAにメニュー(MenuStrip)を置く

    3)メニューにアイテム(ToolStripMenuItem)を置き、適当にイメージを設定する。

     

    4)FormBにPictureBox等へプロジェクトリソースとして適当にイメージを置く。(仮にimegeA)

    5)いったんFormAに戻る。(7を実行するため)

    6)FormBに戻る。

    7)imegeAをプロパティウィンドウからクリアする。

     

    8)ソリューションエクスプローラでimageAをResourceフォルダから削除する。

    9)MyProjectのリソースを表示する→参照エラー発生

     

    以上の操作で、メニューアイテムが消えてしまいます。

    いろいろ検証しましたが、フォームがひとつの場合やメニューアイテムにイメージを設定していない場合は

    同様の操作を行ってもメニューが消えることはありませんでした。

     

     

     

     

     

    2007年11月16日 13:57
  • 連投すみません。

    再現はできたのですが、よくよく考えてみると今回の件が最初に発生した時とは状況が違います。

    ・最初の発生は、イメージ削除後の数時間後にエラーが発生した事。

    ・そのエラーは再現で表示される参照エラーとはまた違うエラー(メッセージボックスで「~が見つかりません」)というエラーだった。

     

    他にも何か原因がありそうですね・・・。

    2007年11月16日 14:17