2016-11-10 2 views
1

В настоящее время в моем приложении имеется около 5 форм. Я создаю 6-ю форму - frmSummary, однако, я хотел бы иметь доступ к ней из всех форм. В frmSummary я планирую добавить DataGridView, где я буду показывать данные, относящиеся к этой форме. Я имею в виду, что я должен либо создать глобальную переменную, такие какПередача параметров между двумя формами в VB.Net

dim FrmName as String 

В каждой форме я бы кнопку cmdSummary так, что на click_event, я хотел бы сделать что-то вроде

frmName ="CustomerInfo" 

В настоящее время путь мое приложение устанавливается, что я в MDIForm ВПО и в ней, каждая форма является ребенком так открывать новые формы я сделать что-то вроде ...

Private Sub cmdSummary_Click(sender As Object, e As EventArgs) Handles cmdSummary.Click 
    Dim NewMDIChild As New frmClientEligibilityReferral() 

    frmName = "CustomerInfo" --since this will be comeing from frmCustomerInfo 
    NewMDIChild.MdiParent = MDIform1 
    NewMDIChild.Show() 
    MDIForm1.Show() 

End Sub 

так что я сделать что-то подобное, что на открытии моего пе w форма. Мой вопрос, как я могу передать параметр в моей форме frmSummary .... вот в настоящее время то, что я пытаюсь выполнить ....

Private Sub FrmSummary_Load(sender As Object, e As EventArgs) Handles Me.Load 

    Me.MdiParent = MDIForm1 

    InitializeComponent() 

'Here I want to call a function to load the datagridView(with g_frmName)see below... 
    call LoadDataGrid(frmName) 
End Sub 

Это что-то вроде этого смарт-идея? Или мне/я могу напрямую вызвать функцию из предыдущей формы? Просто пытаясь понять, нахожусь ли я на правильном пути, если нет, как я могу сделать это по-хорошему?

+0

Что происходит, когда пользователь делает что-то, чтобы 2 формы отображали frmSummary? – Plutonix

+0

хорошо они могут получить доступ только к frmSummary из 1 из 5 в формах (только один раз, пока они не закрываются из frmSumarry, тогда они могут получить к нему доступ из другой формы). В основном они могут быть в форме1, затем они нажимают резюме. FrmSummary фактически откроется в их форме. Я просто хочу, чтобы звук передавал значение frmSummary, чтобы я мог отображать данные, напрямую связанные с ним. Они закроют frmSummary с помощью кнопки CLOSE, и если они находятся в форме2 и нажмите «Сводка», появится frmSummary и с параметром отобразятся данные, относящиеся к form2 – BobSki

+1

Затем [передайте ключ/тег/информацию в конструкторе] (http: //stackoverflow.com/a/19261166/1070452) Хотя uf каждый экземпляр имеет свой собственный код действия, нет причин, по которым вы не можете разрешить несколько копий. – Plutonix

ответ

2

Если есть только один frmSummary, вы можете сделать это singleton.

В frmSummary, поместите следующий код:

Private Shared _instance As frmSummary 

Private Sub New() 
    ' This call is required by the designer. 
    InitializeComponent() 
    ' Add any initialization after the InitializeComponent() call. 
End Sub 

Public Shared Function GetInstance() As frmSummary 
    If _instance Is Nothing Then 
     _instance = New frmSummary() 
    End If 
    Return _instance 
End Function 

Public Sub PutDataInGrid(data As Object) 
    Me.DataGridView1.' put data in it 
End Sub 

И вы сможете получить доступ от других форм, как этот

Dim myFrmSummary = frmSummary.GetInstance() 
myFrmSummary.PutDataInGrid(myData) 
+1

это замечательно, спасибо большое – BobSki

1

Если я правильно понял вопрос правильно ....

Вы можете просто установить необходимые параметры в подписи объявления New (где должно быть InitializeComponent()). В вашей форме объявите переменные и установите по одному для каждого из значений параметров и настройте форму таким образом.

Примером может быть;

Public Class frmSummary 

Dim var1 as String = "" 
Dim var2 as Boolean = True 

Public Sub New(ByVal parameter1 as String, ByVal parameter2 As Boolean) 

    var1 = parameter1 
    var2 = parameter2 

InitializeComponent() 


End Sub 

Private Sub frmSummary_Load(sender as Object, e As EventArgs) Handles MyBase.Load 

    If var1 = "This String" Then 
    If var2 = False Then 
    sql = "SELECT * FROM myTable" 
     ' Rest of your code to get the DGV data 
    DataGridView1.DataSource = Dt 
    Else 
    End If 
    End If 

End Sub 

Опять же, возможно, я неправильно понял вопрос, поэтому извиняюсь, если это так.

+0

Вам все равно понадобится 'InitializeComponent', хотя ... – djv

+0

@david нет, вы поняли правильно. Я делаю то же самое в своем приложении. Я просто хотел убедиться, что это правильный способ сделать это. Спасибо! – BobSki

+0

@ Вердолино Ой, мой плохой. Я имел в виду, потому что OP имел это в событии 'Load', я не хотел пропустить его – David

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