0

実行時に作成されたフォームを 2 回目に開くと、「破棄されたオブジェクトにアクセスできません」というエラーが表示され続けます。「オブジェクト名 'Form'」 関数のコードは次のとおりです。buttonclick イベントによって呼び出されます。私はネット全体を見渡し、同様の問題を抱えている人を見つけましたが、それらの修正を試みましたが、どれも機能しません. この問題を解決する方法がわかりません。VS は frmFavorites.Show(); という行を強調表示します。

前もって感謝します。

public void frmMyBrowser_ShowFavorites(object sender, EventArgs e)
{        
    frmFavorites.ShowIcon = false;
    frmFavorites.ShowInTaskbar = false;
    frmFavorites.Text = "Bookmarks";
    frmFavorites.Width = 500;
    frmFavorites.Height = 320;
    frmFavorites.Controls.Add(lstFavorites);
    frmFavorites.Controls.Add(btnRemoveFavorite);
    frmFavorites.Controls.Add(btnAddFavorite);
    frmFavorites.Controls.Add(txtCurrentUrl);
    lstFavorites.Width = 484;
    lstFavorites.Height = 245;
    btnRemoveFavorite.Location = new Point(397, 255);
    btnAddFavorite.Location = new Point(8, 255);
    txtCurrentUrl.Location = new Point(110, 255);
    txtCurrentUrl.Size = new Size(265, 20);
    btnAddFavorite.Text = "Add";
    btnRemoveFavorite.Text = "Remove";
    txtCurrentUrl.Text = wbBrowser.Url.ToString();
    btnAddFavorite.Click += new EventHandler(btnAddFavorite_Click);
    btnRemoveFavorite.Click += new EventHandler(btnRemoveFavorite_Click);
    frmFavorites.Load += new EventHandler(frmFavorites_Load);
    frmFavorites.Show();
    frmFavorites.FormClosed += new FormClosedEventHandler(frmFavorites_FormClosed);

    StreamReader reader = new System.IO.StreamReader(@Application.StartupPath + "\\favorites.txt");
    {
        while (!reader.EndOfStream)
        {
            for (int i = 0; i < 4; i++)
            {
                string strListItem = reader.ReadLine();
                if (!String.IsNullOrEmpty(strListItem))
                {
                     lstFavorites.Items.Add(strListItem);
                }
            }
        }
        reader.Close();   
    }        
}

public void btnAddFavorite_Click(object sender, EventArgs e)
{
    lstFavorites.Items.Add(wbBrowser.Url.ToString());
}

public void btnRemoveFavorite_Click(object sender, EventArgs e)
{
    try
    {
        lstFavorites.Items.RemoveAt(lstFavorites.SelectedIndices[0]);
    }
    catch
    {
        MessageBox.Show("You need to select an item", "Error");
    }
}
public void frmFavorites_Load(object sender, EventArgs e)
{       
}

public void frmFavorites_FormClosed(object sender, FormClosedEventArgs e)
{
    StreamWriter writer = new System.IO.StreamWriter(@Application.StartupPath + "\\favorites.txt");
    {
        for (int i = 0; i < lstFavorites.Items.Count; i++)
        {
            writer.WriteLine(lstFavorites.Items[i].ToString());
        }
        writer.Close();
    }
    frmFavorites.Close();
 }
4

2 に答える 2

2

これを試して

public void frmMyBrowser_ShowFavorites(object sender, EventArgs e)
{
  frmFavorites = new Form();

   ....
   ....

}
于 2012-07-10T07:32:57.770 に答える
2

閉じたフォームを再度開くことはできません。フォームが閉じられると、(1) 破棄され、(2) 基になるオペレーティング システムのウィンドウ ハンドルが解放されます。

フォームのコンストラクターの内容を取得して、フォームを再度開くために呼び出すことができるメソッドに入れることができると思います、それが機能したとしても、それを行うことはお勧めしません。

代わりに、フォームの新しいインスタンスを作成するだけです。

于 2012-07-10T07:44:45.090 に答える