我有一个窗口窗体应用程序,它有两个主面板:左边的是一个窄条,它有一系列单选按钮。右边的面板包含一个Tabcontrol,其中添加了多个Tabpages,用户可以沿着顶部进行选择。每个选项卡页本身都添加了大约7个DataGridViews。每个DataGridView大约有5-6列文本,有可变的行数(10-500行)。添加到它的数据直接到DGV本身,即使用DGV.Rows.Add()方法,传递一个对象数组,而不是通过数据源。
当用户选择不同的选项卡页时,所显示的数据视图取决于左边选择的无线电按钮。我通过处理选项卡控件的SelectedIndexChange事件和每个无线电按钮的CheckedChange事件来完成这一任务。
在选项卡控件的SelectedIndexChange事件中,我以编程方式检查了当前选定的radioButton。然后在放射按钮的CheckedChange事件中,我遍历TabControl的selectedTab上的所有DataGridViews,并隐藏与所选的无线电按钮不匹配的所有内容。
我的问题是,每当用户开始在许多选项卡之间进行更改,或试图查看包含多行的DGV时,程序都会抛出以下错误:
创建窗口句柄. System.ComponentModel.Win32Exxception:错误.
有人知道是什么导致了上述错误吗?我最初的怀疑是,当我切换到另一个选项卡页时,原来我所在的选项卡页上的DGV仍然在内存中,但是当我尝试在它上调用.Dispose()时,DGV就消失了。也许我错过了一些最基本的东西。
发布于 2011-06-26 17:36:29
问题是,您可能正在尝试显示已处理的DataGridView。
不要在表单中释放任何Control,除非您之前正在从已批准的Container.Controls集合中删除它(因为您不再需要它了,并且/或您计划在它的位置添加一个新的)。否则,在关闭并在必要时释放包含控件的Form时,将释放任何控件。
为了显示正确的DataGridView,取决于所选选项卡和用户选项,请使用Visible属性或动态地向容器的Controls集合添加和删除所需的控件(在本例中为TabPage.Controls )。
如果不是这样的话,那么您可能有一个“控制泄漏”(可能是事件处理程序保存对象),并且您超过了任何给定应用程序的windows句柄限制(我认为是10.000)。
https://stackoverflow.com/questions/6485559
复制相似问题