2014-09-19 2 views
0

Я знаю, что есть много вопросов, связанных с этим, но все же я не могу найти работоспособное решение.VB.NET Call Sub другой формы

Как правило, это будет выглядеть так: форма создает экземпляр другой формы в это контейнер, как это:

Dim PolInstIn As New SubForm1 

Private Sub LoadDetail() 

    PolInstIn.TopLevel = False 
    PolInstIn.Name = "Sub From" 
    PolInstIn.FormBorderStyle = Windows.Forms.FormBorderStyle.None 
    PolInstIn.Dock = DockStyle.Fill 

    Me.GroupBox6.Controls.Add(PolInstIn) 
    PolInstIn.Show() 

End Sub 

Тогда легко вызвать Public Sub от формы к югу, как это:

Call PolInstIn.MyPublicSubInSubForm1() 

Однако в этом случае это не работает. Когда я запускаю MyPublicSubInSubForm1(), он не вызывает никаких ошибок, но не выполняет никаких действий. Если я пишу значение в текстовое поле SubForm1 и читаю его обратно, он читает, но я не вижу его на экране, поэтому я подозреваю, что он написан на другом случайном экземпляре.

Я подозреваю, что моя родительская форма также является экземпляром формы, созданной очень похоже на SubForm1. В основном ParentForm - это форма, загружаемая в tabPage, а SubForm1 - это модуль, загруженный в ParentForm. Он может существовать во многих экземплярах (вкладках).

Не могли бы вы указать на любые простые решения?

С уважением,

Libor

ответ

0

Я вижу, что этот вопрос получил много просмотров, так что вот ответ.

1) Отсутствие визуального ответа дочерней формы (только результаты) - это могло произойти, если я создал более 1 экземпляра формы. Пример - это просто пример, но если использовать его (случайно) таким образом, это может привести к новому определению дочерней формы каждый раз (и последующие симптомы, подобные описанным). На практике я разделял загрузку формы с загрузки данных в форму (выполняемую публичным подкомпонентом в этой форме).

2) Если вы хотите также обратную ссылку (для т.е. формы сетки родительской), определит Public ParentFormGrid, как GridName (обратите внимание ParentForm зарезервированного имя) и о загрузке дочерней формы установите

PollInstIn.ParentFormGrid = Me 

Таким образом, вы всегда можете получить родительскую форму, то есть перезагрузить сетку, когда вы сохраняете изменения в строке, отредактированной в дочерней форме.

-2
Dim PolInstIn As New SubForm1 

Private Sub LoadDetail() 

    PolInstIn.Name = "Sub From" 
    PolInstIn.Show() 
    PolInstIn.TopLevel = False 
    PolInstIn.FormBorderStyle = Windows.Forms.FormBorderStyle.None 
    PolInstIn.Dock = DockStyle.Fill 
    PolInstIn.Update() 
    PolInstIn.Refresh() 

    Me.GroupBox6.Controls.Add(PolInstIn) 


End Sub 
-1

сделать Private Sub LoadDetail() к общественности:

Public Sub LoadDetail() 

Он работает над своим проектом. Hopely его то, что вы хотите

+0

Это позволит вызывать подгрузку LoadDetail в известном экземпляре формы. Проблема выше заключалась в определении/поиске acutal экземпляра. Я разрешил его, указав объект-объект родительской формы в дочерней форме и при создании экземпляра дочерней формы я назначаю экземпляр родительской формы в объект. Я отвечу на этот вопрос (я должен был это сделать ...) –

+0

хорошие новости. я улучшу свой код с вашими предложениями. Спасибо, парни –

Смежные вопросы