【发布时间】:2014-03-15 05:45:55
【问题描述】:
我希望您能提供帮助,因为这个小问题确实令人头疼,经过长时间的研究,我没有找到可行的解决方案。
我的程序使用员工工资号从数据库中检索数据,其中几乎所有表单都使用 WeifenLuo 进行对接。当工资号更改时,它会使用新信息清除数据集,但我们不希望用户必须手动关闭所有打开的停靠窗口 - 实际上每个打开的窗口都需要用新的员工信息刷新。我已经尝试过.refersh()、.invalidate() - 这似乎不会重新加载每个组合/文本框中的数据。
经过大量研究,我尝试了这个:
Private Sub tbPayNumber_KeyDown(sender As Object, e As KeyEventArgs) Handles tbPayNumber.KeyDown
If e.KeyCode = Keys.Enter Then
Call Paynumber_Authentication()
'close and re-open any active forms
Dim table As New DataTable
table.Columns.Add("Forms", GetType(Form))
For Each frm As Form In MdiChildren
table.Rows.Add(frm)
Next
For i = MdiChildren.Length - 1 To 0 Step -1
MdiChildren(i).Close()
Next
For i As Integer = 0 To table.Rows.Count - 1
Dim ResetForms = table.Rows(i)("Forms")
ResetForms.Show(pnlDockMain, DockState.Document)
Next
End If
End Sub
如果我按上述方式运行代码,我会收到恼人的 MS 设计错误“无法访问已处置的对象”。
如果我将代码的最后一部分更改为:
For i As Integer = 0 To table.Rows.Count - 1
Dim ResetForms As New Form
ResetForms = table.Rows(i)("Forms")
ResetForms.Show(pnlDockMain, DockState.Document)
Next
我在ResetForms.Show 行上收到通知重载解析错误 - 参数太多。
值得一提的是,每个表单都会在表单打开时获得所需的任何信息,这可以正常工作。重新加载每个表单的任何帮助将不胜感激,因为我能想到的唯一其他方法是列出每个表单(超过 30 个表单)上的每个文本框,并分别手动给它们新值。很多人谈论这个问题,讨论.IsDisposed 方法等,所以我希望你能找到一个优雅的解决方案。
提前致谢,谢恩
【问题讨论】:
-
我现在设法找到了一个可行的解决方案 - 它不是很优雅,所以如果您有任何改进,请发布。
标签: vb.net winforms refresh page-refresh