C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: 子画面がMainMenuを持つ場合の解放のやりかた


(過去ログ 13 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■4205 / inTopicNo.1)  子画面がMainMenuを持つ場合の解放のやりかた
  
□投稿者/ 丸太 (2回)-(2007/06/09(Sat) 12:46:37)

分類:[VB.NET (Windows)] 

開発環境は以下の通りです。

WindowsXPSP2
.NETFramework1.1SP1
VisualStudio2003
VB.NET

Form1(業務メニュー画面)のButtonを押すと
MainManuを持つForm2(業務画面)が表示される、というアプリケーションを作りました。

ぱっと見には問題ないのですが、利用者から
「しばらく使っていると動きが不安定になり、その後システムエラーを吐いて落ちる」という連絡を受け
プロファイラにかけてみたところ、Form2を開く度にインスタンスが解放されずに溜まっていく事を確認しました。
(Form2を閉じても解放されない)

上記の現象が再現するまでコードを削っていったところ
Form2にMainMenuを持たせると現象が発生するようです。

そこで質問なのですが、アプリケーションの子画面にMainMenuを持たせた時に
正しく解放されるようにする方法はありませんか?
(Button等の他のコントロールであれば、Formを閉じたときに自動的に解放されるので
同じようにできればいいんですが…)

以下、コードの抜粋です。

Public Class Form1
    Inherits System.Windows.Forms.Form

' デザイナ生成部分省略

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim f2 As New Form2
        f2.Show()
    End Sub
End Class

Public Class Form2
    Inherits System.Windows.Forms.Form

' デザイナ生成部分省略(MainMenuとMenuItemのみ)

End Class

引用返信 編集キー/
■4206 / inTopicNo.2)  Re[1]: 子画面がMainMenuを持つ場合の解放のやり
□投稿者/ taka (17回)-(2007/06/09(Sat) 13:37:45)
2007/06/09(Sat) 13:42:03 編集(投稿者)

はじめまして、takaといいます。

いまいち状況がよくわからないのですが、
ここでいうMainMenuってなんですか?
Form1のこと・・・ではないですよね?

とりあえずデザイナ生成部がどうなっているのかが気になります。

追記
System.Windows.Forms.MainMenuですかね。
存在すら知らなかった orz
引用返信 編集キー/
■4207 / inTopicNo.3)  Re[2]: 子画面がMainMenuを持つ場合の解放のやり
□投稿者/ とりこびと (19回)-(2007/06/09(Sat) 14:35:37)
とりこびと さんの Web サイト
こんにちは。とりこびとです。

あんまりよく分かってないのですが、
MainMenu は Container に追加されていますか?
MainMenu を Container に追加してみたらどうなりますか?

Form2 の コンストラクタを以下に。

    Public Sub New()
        MyBase.New()

        ' この呼び出しは Windows フォーム デザイナで必要です。
        InitializeComponent()

        ' InitializeComponent() 呼び出しの後に初期化を追加します。

        If Me.components Is Nothing Then

            Me.components = New System.ComponentModel.Container

        End If

        Me.components.Add(ココに MainMenu を。)

    End Sub

引用返信 編集キー/
■4213 / inTopicNo.4)  Re[1]: 子画面がMainMenuを持つ場合の解放のやりかた
□投稿者/ Pandora (28回)-(2007/06/09(Sat) 17:17:03)
> アプリケーションの子画面にMainMenuを持たせた時に
> 正しく解放されるようにする方法はありませんか?

MainMenuを所持しているFormのDispose()メソッド内に解放する命令
 MainMenuのDispose()を記述して下さい。

 .NET1.1では、自分で解放しなければいけないみたいです。
 .NET2.0では、フレームワーク側で解放してくれているみたいです。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -