У меня есть список в моей основной форме vb.net, которую я использую для отображения сообщений о статусе из программы сервера, которую я запускаю. Моя фактическая программа состоит из множества разных классов (в отдельных файлах), и я хотел бы, чтобы это было возможно - вызвать Sub frm.UpdateList («With Info in Here») из каждого класса для записи в список.update listbox в GUI из других классов
Если я вызываю frm.UpdateList или UpdateList из класса frm, он отлично записывает в список, но если я его вызываю из любого другого класса, ничего не происходит (я тоже не получаю ошибку).
Я пробовал с и без совместного использования (и менял frm на меня), но не работает, как я надеюсь.
Может ли кто-нибудь помочь мне понять, почему это не работает, я вызвал элемент, и он добавляется, но только не из отдельного класса (это то, что мне нужно для этого).
Большое спасибо!
Private Delegate Sub UpdateListDelegate(ByVal itemName As String)
Public Shared Sub UpdateList(ByVal itemName As String)
If frm.InvokeRequired Then
frm.Invoke(New UpdateListDelegate(AddressOf UpdateList), itemName)
Else
frm.ListBox1.Items.Insert(0, DateTime.Now.ToString & ": " & itemName)
End If
End Sub
Edit: Попробуйте 2, со следующими благодаря Idle_Mind работает на классе FRM (FRM является основной формой и только форма), но она до сих пор не пишут в ListBox при вызове из других классов (и нет возникают ошибки):
Public Shared Sub UpdateList(ByVal itemName As String)
Dim frm As Form = My.Application.ApplicationContext.MainForm
If Not IsNothing(frm) Then
Dim matches() As Control = frm.Controls.Find("ListBox1", True)
If matches.Length > 0 AndAlso TypeOf matches(0) Is ListBox Then
Dim LB As ListBox = DirectCast(matches(0), ListBox)
LB.Invoke(New MethodInvoker(Sub() LB.Items.Insert(0, DateTime.Now.ToString & ": " & itemName)))
End If
End If
End Sub
Является ли frm объектом формы или именем класса (формы)? –
Почему бы просто не предоставить публичный метод в форме, которую может вызвать любой актер? – Plutonix