【问题标题】:VB.NET Reloading Active Docked FormsVB.NET 重新加载活动的停靠窗体
【发布时间】: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


【解决方案1】:
Private Sub tbPayNumber_KeyDown(sender As Object, e As KeyEventArgs) Handles tbPayNumber.KeyDown

If e.KeyCode = Keys.Enter Then
    Call Paynumber_Authentication()
    Call Load_Employee()

        'close and re-open any active forms
        Dim table As New DataTable
    table.Columns.Add("Forms", GetType(String))

    For Each frm As Form In MdiChildren 'load the name of each open form into a dataset
        table.Rows.Add(frm.Name)
    Next

    For i = MdiChildren.Length - 1 To 0 Step -1 'closes all open docked windows
        MdiChildren(i).Close()


    Next

    For i As Integer = 0 To table.Rows.Count - 1

        Select Case table.Rows(i)("Forms")
            Case "EmployeeDetails"
                Dim LoadForm As New EmployeeDetails
                EmployeeDetails.Show(pnlDockMain, DockState.Document)
            Case "HomePage"
                Dim LoadForm As New HomePage
                HomePage.Show(pnlDockMain, DockState.Document)
            Case "SOEInput"
                Dim LoadForm As New SOEInput
                SOEInput.Show(pnlDockMain, DockState.Document)
        End Select

    Next

End If

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 2011-03-13
    • 2011-03-04
    相关资源
    最近更新 更多