关于Winform中用ShowDialog打开窗体的一个奇怪问题

飞不动 2008-10-21 10:41:27
一直来很少用.net中的winform编程,最近有个小项目要用vs2005的winform,发现一个让我很郁闷的问题。
我用以下代码打开一个窗体,打开的窗体中有一个DataGridView控件,我编程在DataGridView加入一些行(数据源中加入行,重新邦定的,DataGridView是只读的。)。我加入了几行以后,只要用鼠标选定其中一行,程序出现错误。出错的地方非常奇怪,竟然是在下面的代码中出错。在ShowDialog时出错。我选定frmTrade窗体中的DataGridView,根本没有处理任何事件,也没有关闭窗体去返回一值,程序怎么自动的返回到ShowDialog这句代码中去了。错误提示是:索引 -1 没有值。我百思不得其解,我操作frmTrade的DataGridView控件,跟这句代码没有一点相干的地方,为什么会触发它呢?
frmTrade form = new frmTrade();
if(form.ShowDialog() == DialogResult.OK) //这里出现错误,索引 -1 没有值。 IndexOutRangeException。
{
//刷新页面操作。
}

可能是我表达不够清楚,这个问题确实不好表达,难道是.net的Bug?有谁遇到过同类型的问题吗?
...全文
354 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞不动 2008-10-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 renjnet 的回复:]
你的DataGridView的相关事件有哪些?是不是某个时间触发了Dialog.Ok事件?
[/Quote]
我没有用到DataGridView的任何事件。当双击或改变选定行时,却又触发了错误。
renjnet 2008-10-21
  • 打赏
  • 举报
回复
你的DataGridView的相关事件有哪些?是不是某个时间触发了Dialog.Ok事件?
飞不动 2008-10-21
  • 打赏
  • 举报
回复
单步设断点没用,根本不触发。
我找到原因,但还没有想通为什么。
我在Form_load中对DataGridView进行了邦定,数据源为一泛型列表<List>。
当这个列表为空的时候,就会出现我所描述的错误。如果列表中有数据,则不会。
奇怪的是邦定的时候不出错,当在我动态的在泛型列表中加入数据,并且重新邦定后,只要动一下DataGridView(比如双击或改变选定行)都会出错,跳回到ShowDialog这句代码中去。
优途科技 2008-10-21
  • 打赏
  • 举报
回复
O8***80
wangkuang5 2008-10-21
  • 打赏
  • 举报
回复
单步设断点,看看
messagebox报你的值出来
hao1hao2hao3 2008-10-21
  • 打赏
  • 举报
回复
呵呵!慢慢调吧!灵感会来找你的。
lovehongyun 2008-10-21
  • 打赏
  • 举报
回复
看看你的frmTrade的Form_load里都干嘛了.

lovehongyun 2008-10-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 echeng192 的回复:]
单步设断点没用,根本不触发。
我找到原因,但还没有想通为什么。
我在Form_load中对DataGridView进行了邦定,数据源为一泛型列表 <List>。
当这个列表为空的时候,就会出现我所描述的错误。如果列表中有数据,则不会。
奇怪的是邦定的时候不出错,当在我动态的在泛型列表中加入数据,并且重新邦定后,只要动一下DataGridView(比如双击或改变选定行)都会出错,跳回到ShowDialog这句代码中去。
[/Quote]

就是这个样子的.所以我在1楼让你看下load里面都干嘛了.呵呵.
飞不动 2008-10-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 guest78978 的回复:]
奇怪的是邦定的时候不出错,当在我动态的在泛型列表中加入数据,并且重新邦定后,只要动一下DataGridView(比如双击或改变选定行)都会出错

是因为动态的数据出错了,所以窗体自行关闭,就回到if(form.ShowDialog() == DialogResult.OK)这里去了
[/Quote]
NO,如果动态的数据出错,应该就不能邦定到控件上去。问题是数据已经绑定到控件上去,并且已经显示出来了。比如原来一行的,现在已经显示出两行了。
应该是窗体自行关闭,但不知道它为什么要关闭。
guest78978 2008-10-21
  • 打赏
  • 举报
回复
奇怪的是邦定的时候不出错,当在我动态的在泛型列表中加入数据,并且重新邦定后,只要动一下DataGridView(比如双击或改变选定行)都会出错

是因为动态的数据出错了,所以窗体自行关闭,就回到if(form.ShowDialog() == DialogResult.OK)这里去了

111,098

社区成员

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

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

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