動的に作成したメニューを逆に削除するには?

解決


マロン  2005-10-11 17:40:05  No: 126192  IP: [192.*.*.*]

[開発環境:Win98/XP、VB6SP6]

いつもお世話になります。
今回は、動的に生成したサブメニューを、逆に削除する方法をお尋
ねします。

動的に生成する方法については過去ログにもあるし、既に私もその
機能の実現はできているのですが、削除する方法がいまいちわかり
ません。

ちなみにサブメニューの生成は、私は例えば次のようにやっています。

  For i = 0 To a    'a は、存在するデータの数
    Load mnuSample(i)
  Next

メニューエディタで予め mnuSample(0) というのを作っておいて、
存在するデータの数だけループを回してサブメニューを生成する
ようにしています。

データを途中で削除した場合に、改めてデータの数だけのサブメニュー
を作成しなおしたいのですが、どのような方法がありますでしょうか。
よろしくお願いします。

編集 削除
魔界の仮面弁士  2005-10-11 17:59:40  No: 126193  IP: [192.*.*.*]

とりあえず、『Unload mnuSample(番号)』、とか。

編集 削除
マロン  2005-10-11 18:36:25  No: 126194  IP: [192.*.*.*]

魔界の仮面弁士さん、お久しぶりです。
早速ありがとうございます。

はい。おっしゃるように、私も最初そのようにしたのですが、
「デザイン時に作成されたコントロールはアンロードできません」
というメッセージが出てしまい、だめでした。

編集 削除
・・・。  2005-10-11 19:01:00  No: 126195  IP: [192.*.*.*]

>メニューエディタで予め mnuSample(0) というのを作っておいて、

というのは、いわゆる「デザイン時に作成された・・・。」という意味では?

編集 削除
マロン  2005-10-11 19:06:45  No: 126196  IP: [192.*.*.*]

はい、デザイン時に最初の一つ目を作成しておき、実行後は、データが全く
ない場合はVisible=Falseに、1つ以上ある場合にはVisible=True
にします。
そして、2つ目以降のデータでは、ループで新しくサブメニューを
生成します。

ちなみに、今回のエラーメッセージが出る前には、きちんと所定の
サブメニューは生成されていて、そのメニューをクリックすると、きちんと
それ以降の働きをします。

編集 削除
魔界の仮面弁士  2005-10-11 21:35:46  No: 126197  IP: [192.*.*.*]

>「デザイン時に作成されたコントロールはアンロードできません」

Unload の際に、コントロール配列の Index 値を見直してみてください。
もしかして、デザイン時にあらかじめ用意してあった分を
Unload しようとしていませんか?

Unload できるのは、実行時に Load ステートメントで
動的に増やした物だけです。

編集 削除
マロン  2005-10-12 00:18:49  No: 126198  IP: [192.*.*.*]

> もしかして、デザイン時にあらかじめ用意してあった分を
> Unload しようとしていませんか?

なるほど、今納得しました。
最初に作成していたものは、飛ばして削除しなければいけませんね。

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

編集 削除