Надеюсь, вы можете помочь, так как эта небольшая проблема была настоящей головной болью, и после длительных исследований я не нашел жизнеспособного решения.VB.NET Reloading Active Docked Forms
В моей программе используется номер оплаты служащего для извлечения данных из базы данных, при этом почти все формы состыкованы с использованием 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
Я получаю informous ошибку разрешения перегрузки на ResetForms.Show
линии - слишком много аргументов.
Стоит сказать, что каждая форма будет получать любую информацию, необходимую ей при открытии формы, которая работает правильно. Любая помощь по перезагрузке каждой формы была бы оценена, так как единственный другой способ, о котором я могу думать, - перечислить каждое текстовое поле в каждой форме (более 30 форм) и дать им новые значения индивидуально - и вручную. Многие люди говорят об этой проблеме, принимая метод .IsDisposed
и т. Д. Поэтому я надеюсь, что вы найдете элегантное решение.
Заранее спасибо, Шейн
Я теперь удалось найти решение, которое работает - его не очень элегантно, так что если у вас есть какие-либо улучшения, пожалуйста, напишите. –