当我需要显示一张表单时,我总是得到一个ObjectDisposedExpection。你们知道怎么做吗?在NotitiesForm.Show()的前文中,我得到了错误ObjectDisposedExpection。我正在用VisualStudioUltimal2012 C#编程。
RichTextBox NotitiesTB = new RichTextBox();
private Form NotitiesForm;
/// <summary>
///
/// </summary>
/// <param name="label"></param>
///
public void NotitiesLatenZien()
{
if (filename != null)
{
BRTSignal signal = new BRTSignal(filename);
BRTEventRepository Notities = new BRTEventRepository(signal);
List<IBRTNote> note = Notities.ReadNotes();
BRTEventService TijdNotities = new BRTEventService(signal);
TijdNotities.MakeNoteTimesRelativeToTrack(note, 1);
//TextBox NotitiesTB = new TextBox();
//NotitiesTB.Name = "Notities";
if (NotitiesForm == null)
{
NotitiesForm = new Form();
}
NotitiesForm.Height = 600;
NotitiesForm.Width = 1000;
NotitiesForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
NotitiesForm.MaximizeBox = false;
NotitiesForm.Disposed +=NotitiesForm_Disposed;
NotitiesForm.Text = "Notities";
NotitiesTB.Multiline = true;
NotitiesTB.Height = 600;
NotitiesTB.Width = 980;
NotitiesTB.ReadOnly = true;
NotitiesTB.Clear();
//NotitiesTB.Click += NotitiesTB_Click;
//NotitiesTB.SelectionStart = Convert.ToInt32(referenceLineSelectedPage);
NotitiesTB.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Both;
NotitiesTB.Name = "Notities";
NotitiesForm.Controls.Add(NotitiesTB);
foreach (IBRTNote notes in Notities.ReadNotes())
{
//string test = Convert.ToString((notes.Time));
//textBox1.Text = String.Concat(textBox1.Text, string.Concat(Environment.NewLine, notes.Text));
if (NotitiesTB.Text == "")
{
NotitiesTB.Text += new BRTToDotNET.RTDateTime((long)notes.Time).ToDotNet().ToString() + " " + notes.Text;
}
else
{
NotitiesTB.Text += "\r\n" + new BRTToDotNET.RTDateTime((long)notes.Time).ToDotNet().ToString() + " " + notes.Text;
}
//MessageBox.Show("\r\n" + notes.Text);
NotitiesForm.Show();
NotitiesForm.BringToFront();
}
}
else
{
MessageBox.Show("Er blijkt een .sig file te missen. Controleer of u een .sig file heeft ingeladen.");
}
}
private void NotitiesForm_Disposed(object sender, EventArgs e)
{
NotitiesForm = null;
} 发布于 2015-01-27 03:30:25
你发布的代码看起来“足够好”。也就是说,在释放对象时设置NotitiesForm变量,如果对象为null,则创建一个新变量。只要所有这些代码都在主UI线程中执行,该部分就可以了。
但是请注意,Form中的所有控件都是在释放Form时释放的。因此,您的NotitiesTB控件将在第一次关闭NotitiesForm时被释放。然后将该控件添加到您创建的下一个Form实例中,当它显示时,您将得到异常,因为您试图显示包含已被释放的控件的Form。
正确的方法是设计一个实际的Form子类,该子类已经包含所需的RichTextBox实例。然后,您不必一直将一个新实例添加到您创建的Form的每个新实例中。
否则,您需要创建一个新的RichTextBox实例,以便与您创建的每个新的Form实例一起使用,例如,在您拥有NotitiesForm = new Form();语句的同一个地方。
https://stackoverflow.com/questions/28149698
复制相似问题