
VB6でユーザーコントロールを作りまして、OCXにしてそれを、ある画面に数十個張り付けているのですが、メモリをたくさん食います。タスクマネージャで見ると50Mを超え、エラーがでるようです。
画面に張り付けたユーザーコントロールですが、画面を消してもメモリはあまり減らず食ったままになります。画面はちゃんとNothingしているのですが、ユーザーコントロールに使われているメモリは開放されないようです。次のことをご教授願えればおねがいいたします。
1)ユーザーコントロールOCXを動的に画面に張り付ける方法
2)デザイン画面で張り付けたユーザーコントロールOCXのメモリを開放する方法
3)メモリをあまり消費しないユーザーコントロールの作り方
その他なにかよいアドバイスがあればお願いいたします。
No.3ベストアンサー
- 回答日時:
>1)ユーザーコントロールOCXを動的に画面に張り付ける方法
予め1つだけユーザーコントロールを貼り付けて、Indexに0を入れておく(=コントロール配列にする)。
Form_Loadで必要なだけロードして、位置を移動しておく。
(数十個あると位置を移動っていうのが面倒そう。)
With Text1
Load .Item(.UBound + 1)
With .Item(.UBound)
.Visible = True
.Left = 100 '←位置。
.Top = 100 '位置。
End With
End With
>2)ユーザーコントロールOCXのメモリを開放する方法
デザイン画面で貼り付けておいたコントロールはたぶん解放できないです。
Form_Unloadで、最初に貼り付けておいたコントロール以外を削除する。
Private Sub Form_Unload(Cancel As Integer)
Dim i As Integer
With Text1
For i = .LBound + 1 To .UBound
'1つを残して開放
Unload .Item(.UBound)
Next
End With
End Sub
ところで。
>画面はちゃんとNothingしているのですが、
Unload フォーム
をしてもユーザーコントロールだけ破棄されないんですか?
この回答への補足
>Unload フォーム
>をしてもユーザーコントロールだけ破棄されないんですか?
Unload フォームをしても、ただNothingするだけでも結果は同じなようです。Unload フォームはどの位置にいれたらいいでしょうか?
Unload フォーム
Set フォーム = Nothing
でいいですか?
No.4
- 回答日時:
せっかく書いた回答が消えた(;;)
は、いいとして。
UnloadしてもNothingしても同じですか?
Nothingで画面が消えるんですか!?
どうやって画面を消してますか?
Unloadのタイミングは恐らくNothingのタイミングと同じでいいです。
私はUnloadだけして、Nothingはしたことありません。
だからSet フォーム = NothingとUnload フォームを置き換える形です。
フォームをUnloadしても、その後でフォーム上のコントロールとかに何かすると勝手にロードされます。
何もしてませんか?
Set フォーム = Nothing
ではたぶんロードされてないような気がしますけど、どうなんだろう。
フォームを表示する前と消した後に
Debug.Print Forms.Count
と書いて見てください。
表示の前後で同じ数なら、フォームはきちんとUnloadされてるハズ。
きちんとUnloadされてるなら、私の考え違いですね。
余計なこと言ってごめんなさい。
この回答への補足
ありがとうございます。
>UnloadしてもNothingしても同じですか?
同じようですねぇ。
>どうやって画面を消してますか?
普通にUnload Me しています。
普通にUnload Me してもメモリ使用量が減らないんですよね、これってユーザーコントロールのメモリが完全に開放されていないということだと思うのですが。(-~-)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAのコントロールの種類...
-
カメラスクロールするのを動画...
-
chr関数の呼び出しで「プロ...
-
Excel VBA 動的に作成したチェ...
-
複数のコマンドボタン(VBAで)...
-
ControlTipTextの書式設定(Font...
-
Pictureコントロールの...
-
WinAPIで電卓をクリック
-
VBAのカレンダーコントロールに...
-
OCXって何ですか?
-
VBAのフォームでTextBoxがいっ...
-
Shapeコントロールの.NET移行方法
-
winndws セキュリティ
-
全てのオブジェクトのプロパテ...
-
VB6でシリアルポートの制御
-
Webカスコンってなんですか?
-
C#で角が丸いテキストボックス
-
VBA ユーザーフォームの Keypre...
-
カレンダーコントロールをシー...
-
vb.netで画面のコントロールId...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAのコントロールの種類...
-
EXCELでactivexコントロールを...
-
ExcelVBAでListViewが使用できない
-
'ckbl' コントロールは作成され...
-
カメラスクロールするのを動画...
-
VBA ユーザーフォームの Keypre...
-
vb.netで画面のコントロールId...
-
エクセル・VBA CheckBoxのオブ...
-
chr関数の呼び出しで「プロ...
-
エクセルVBAでオプションボタン...
-
Groupboxの配下のコントロール...
-
エクセル コントロールツール...
-
Labelコントロールの(左右)余...
-
チェックボックスをオンにした...
-
Excel VBA で Richtextboxを使...
-
アクセス特有の書き方?
-
(VBA)スピンボタンの大量...
-
ActiveX DLL と ActiveXコント...
-
C# ユーザコントロール内のボタ...
-
Excel VBA 動的に作成したチェ...
おすすめ情報