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で質問しましょう!
似たような質問が見つかりました
- PDF パソコンからUSBメモリにPDFを移したらファイルを開けない 2 2022/08/22 11:42
- 画像編集・動画編集・音楽編集 AfterEffectでのシャターの挙動がおかしい 1 2023/05/07 00:38
- モニター・ディスプレイ 原神とpcのスペックについて 1 2022/06/18 15:50
- UNIX・Linux Ubuntu on Xorgのログインについて 2 2023/08/10 15:16
- その他(プログラミング・Web制作) 単純なコマンドプロンプトが動きません。 2 2022/04/19 15:21
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- Windows 10 windowsセキュリティーでパスワードエラー 1 2022/06/14 19:49
- デスクトップパソコン PCの通電はするがモニタが黒い画面のまま何も表示はじまらない。 7 2023/01/10 09:36
- Visual Basic(VBA) vba メモリ節約 3 2022/09/16 21:45
- Outlook(アウトルック) outlook メモリ不足 1 2022/05/31 10:16
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBのフォーム上にPDF文書を表示...
-
ユーザコントロールのイベント...
-
フォーム上の現在アクティブな...
-
カメラスクロールするのを動画...
-
VB.NET 動的コントロールの存在...
-
もしフォームヘッダーにコント...
-
変数をコントロール型で使用す...
-
ExcelVBAのコントロールの種類...
-
excelのリストボックスで選択し...
-
エクセル・VBA CheckBoxのオブ...
-
アクセス特有の書き方?
-
VB6.0 プロジェクトオープン時...
-
コンボボックスの文字によるif...
-
間違えて配置してしまったコン...
-
C#で自分のウインド・ハンド...
-
vb.netで画面のコントロールId...
-
Excel VBA 動的に作成したチェ...
-
'ckbl' コントロールは作成され...
-
C# ユーザコントロール内のボタ...
-
DataGridView、1セルに複数コ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル・VBA CheckBoxのオブ...
-
カメラスクロールするのを動画...
-
vb.netで画面のコントロールId...
-
C#,vb.netで業務用アプリ開発と...
-
EXCELでactivexコントロールを...
-
フォーム上の現在アクティブな...
-
ExcelVBAでListViewが使用できない
-
コンボボックスの文字によるif...
-
C#で角が丸いテキストボックス
-
エクセルVBAでオプションボタン...
-
ユーザーフォームで動的(Me.Con...
-
VBAのフォームでTextBoxがいっ...
-
アクセス特有の書き方?
-
エクセル コントロールツール...
-
間違えて配置してしまったコン...
-
(VBA)スピンボタンの大量...
-
Labelコントロールの(左右)余...
-
変数をコントロール型で使用す...
-
excelのリストボックスで選択し...
-
Excel VBA で Richtextboxを使...
おすすめ情報