问题 显示新形式

l4gspike

新成员
已加入
2016年7月8日
留言内容
3
编程经验
Beginner
今天是个好日子,
我正在编写自己的Web浏览器,只是为了做某事。
我能够浏览网络及其所有内容,但是当我尝试添加历史记录表格时我崩溃了。

好吧,这是第一次工作,并在我关闭历史记录窗口并尝试再次打开它时记录了我的历史记录,但是我崩溃了。这是我不断得到的错误。

C#:
ObjectDisposedException was unhandled
C#:
An unhandled exception of type 'System.ObjectDisposedException' occurred in System.Windows.Forms.dll




这是我写的代码。



C#:
public partial class frmBrowser : Form
          { 
             public frmBrowser()
             {
                InitializeComponent();
             }

             [COLOR=#b22222]public History frmhis = new History();[/COLOR]

        private void NavigateToPage()
        {
            //takes url from toolbar text box and navigates to webpage
            txtURL.Enabled = false;
            btnGo.Enabled = false;
            wbBrowser.Navigate(txtURL.Text);
            txtURL.Items.Add(txtURL);
            txtStatlbl.Text = "Navigation has started";
[COLOR=#b22222]            frmhis.lstHistory.Items.Add(txtURL.Text);[/COLOR]
        }


C#:
[COLOR=#b22222]private void historyToolStripMenuItem_Click(object sender, EventArgs e)[/COLOR][COLOR=#b22222]         {[/COLOR]
[COLOR=#b22222]            frmhis.Show();[/COLOR]
[COLOR=#b22222]         }[/COLOR]


红色的所有内容与所涉及的代码有关。
任何帮助表示赞赏。
提前致谢
L4gspike
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,076
地点
挪威
编程经验
10+
关闭表单后,它会自动处理,然后您的frmhis字段变量仅指向已处理的对象。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
如果通过调用Show来显示表单,则该表单在关闭时将被处置,但它仍然存在。这意味着您仍然可以引用它,但无法再次显示它。我认为这是在每次要显示新实例时都保留对表单的引用的最佳方法:
private SomeForm dialogue;

private void DisplayDialogue()
{
    // dialogue will be null the first time and IsDisposed will be true if the last instance has been closed.
    if (dialogue == null || dialogue.IsDisposed)
    {
        dialogue = new SomeForm();
    }

    // This will display the new instance if one is not already displayed.
    dialogue.Show();

    // This will focus the existing instance if one is already displayed.
    dialogue.Activate();
}
 

l4gspike

新成员
已加入
2016年7月8日
留言内容
3
编程经验
Beginner
如果通过调用Show来显示表单,则该表单在关闭时将被处置,但它仍然存在。这意味着您仍然可以引用它,但无法再次显示它。我认为这是在每次要显示新实例时都保留对表单的引用的最佳方法:
private SomeForm dialogue;

private void DisplayDialogue()
{
    // dialogue will be null the first time and IsDisposed will be true if the last instance has been closed.
    if (dialogue == null || dialogue.IsDisposed)
    {
        dialogue = new SomeForm();
    }

    // This will display the new instance if one is not already displayed.
    dialogue.Show();

    // This will focus the existing instance if one is already displayed.
    dialogue.Activate();
}



非常感谢,它运作良好!
 
最佳 底部