单例窗口关闭后,无法再次打开?“无法访问已释放的对象”

lkf181 2019-06-23 02:17:24
我是想在dataGridView1中选择一行数据后,弹出一个窗口,用于显示详细内容,

用于显示详细内容的窗口我为了防止其打开多个窗口,写成了一个单例模式的窗口:

//显示消息的窗口
private static FormToolTips _instance = new FormToolTips();
private FormToolTips()
{
InitializeComponent();
FormStyle();
}
public static FormToolTips GetInstance()
{
return _instance;
}

public string TxtContent { set; get; }

//...........................................................

private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
this.Dispose();
}


//在dataGridView1 窗口中 选择某行数据后,打开FormToolTips窗口
private DataGridViewCell GetSelectedValue()
{

DataGridViewSelectedRowCollection dataGridViewSelectedRowCollection = dataGridView1.SelectedRows;
DataGridViewCell cellSelected = dataGridViewSelectedRowCollection[0].Cells[2];
// MessageBox.Show(cellSelected.EditedFormattedValue.ToString());

FormToolTips ft = FormToolTips.GetInstance();
ft.TxtContent = cellSelected.EditedFormattedValue.ToString();
ft.Show();
return cellSelected;
}



现在的问题是: 第一次可以正常打开,但是FormToolTips窗口关闭 后,再想打开,就出现:$exception {"无法访问已释放的对象。\r\n对象名:“FormToolTips”。"} System.ObjectDisposedException 异常!!

好像得用 //this.BeginInvoke().........不会写.......

...全文
1730 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
還是 2019-06-25
  • 打赏
  • 举报
回复
一个全局窗口,设置隐藏和显示属性就好了吧! 同时也可以更新数据,窗口关闭时就隐藏,打开时就显示.
fancybit 2019-06-25
  • 打赏
  • 举报
回复
去掉那个Dispose调用即可
左耳边的期盼 2019-06-25
  • 打赏
  • 举报
回复
我只是路过打酱油的。。。。。。
正怒月神 2019-06-24
  • 打赏
  • 举报
回复
你不是自己 dispose了吗?
  • 打赏
  • 举报
回复
引用 6 楼 lkf181 的回复:
[quote=引用 5 楼 exception92 的回复:] 搞什么单例,防止多次打开就使用模态窗口了。 单例有利也有弊,利是某个对象在整个应用程序中引用只用初始化一次就可以使用,弊是很多情况下,区分不了对象的作用范围,导致某个地方修改了会影响其它地方。
谢谢,模态窗口是个好主意,之前还真没想到,不过试了一下,不能满足要求,即在模态窗口维关闭时,不能重新选择数据,我是想实时的显示所选数据的.......[/quote] 实时显示窗口只打开一次就行了,使用委托通知选择项的更改到显示窗口,定义传递的参数为选择项即可。单例完全可以舍弃。
lkf181 2019-06-24
  • 打赏
  • 举报
回复
引用 5 楼 exception92 的回复:
搞什么单例,防止多次打开就使用模态窗口了。 单例有利也有弊,利是某个对象在整个应用程序中引用只用初始化一次就可以使用,弊是很多情况下,区分不了对象的作用范围,导致某个地方修改了会影响其它地方。
谢谢,模态窗口是个好主意,之前还真没想到,不过试了一下,不能满足要求,即在模态窗口维关闭时,不能重新选择数据,我是想实时的显示所选数据的.......
  • 打赏
  • 举报
回复
搞什么单例,防止多次打开就使用模态窗口了。 单例有利也有弊,利是某个对象在整个应用程序中引用只用初始化一次就可以使用,弊是很多情况下,区分不了对象的作用范围,导致某个地方修改了会影响其它地方。
IT流水兵 2019-06-24
  • 打赏
  • 举报
回复 2
既然你还要打开,又用了单例,就不要关闭了,用隐藏就行了.
Mr.胤少 2019-06-23
  • 打赏
  • 举报
回复
我写的窗体关闭都是只用了close,没用dispose,close后会调用dispose,不用再写一次this.Dispose(),我在FormClosing写了那两句后没出现过报错,只是把窗体可见性设为了false,同时把form的关闭给取消掉了,水平有限,说得有不对后来的大神指正。
lkf181 2019-06-23
  • 打赏
  • 举报
回复
引用 1 楼 Mr.胤少 的回复:

private void DataMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            this.Visible = false;
            e.Cancel = true;
        }
窗体的FormClosing加上这两句,再试试
是在FormToolTips窗体里加_FormClosing事件吧? 加了问题依旧..........
Mr.胤少 2019-06-23
  • 打赏
  • 举报
回复

private void DataMain_FormClosing(object sender, FormClosingEventArgs e)
{
this.Visible = false;
e.Cancel = true;
}

窗体的FormClosing加上这两句,再试试
wanghui0380 2019-06-23
  • 打赏
  • 举报
回复
this.Dispose(); 这个不是你自己写的,你让他释放,他敢不释放么

111,090

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧