2016-11-10 3 views
1

Ich habe derzeit etwa 5 Formulare in meiner Anwendung. Ich baue eine 6. Form - frmSummary, aber ich möchte in der Lage sein, von allen Formen darauf zuzugreifen. In FrmSummary plane ich eine DataGridView hinzuzufügen, wo ich Daten zu diesem Formular anzeigen werde. Ich denke, dass ich entweder soll eine globale Variable wieÜbergabe von Parametern zwischen zwei Formen in VB.Net

dim FrmName as String 

In jedem Formular erstellen würde ich eine cmdSummary Taste, so dass auf Click_Event, ich so etwas wie

frmName ="CustomerInfo" 

Derzeit ist die Art und Weise tun würde meine Anwendung eingerichtet ist, dass ich eine MDIForm und in ihrem hve, ist jede Form ein Kind so auf neue Formen zu öffnen ich etwas tun, wie ...

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 

so mache ich so etwas wie, dass mein ne beim Öffnen w Form. Meine Frage ist, wie kann ich die Parameter auf meine Form frmSummary passieren .... hier ist zur Zeit, was ich versuche zu erreichen ....

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 

Ist so etwas eine kluge Idee? Oder soll ich/kann ich die Funktion direkt aus dem vorherigen Formular aufrufen? Nur versuchen zu sehen, ob ich auf dem richtigen Weg bin, wenn nicht, wie kann ich es auf eine gesunde Art und Weise tun?

+0

Was passiert, wenn der Benutzer etwas tut, damit 2 Formulare die frmSummary anzeigen müssen? – Plutonix

+0

Nun sind sie nur in der Lage, auf die FrmSummary von 1 von 5 bei Formularen zuzugreifen (nur einmal, bis sie aus frmSumarry schließen, dann können sie von einem anderen Formular aus darauf zugreifen). Grundsätzlich können sie auf Form1 sein, dann klicken sie auf Zusammenfassung. FrmSummary wird tatsächlich in ihrer Form geöffnet. Ich möchte nur einen vernünftigen Weg, um einen Wert an frmSummary zu übergeben, damit ich Daten anzeigen kann, die direkt damit zusammenhängen. Sie werden schließen FrmSummary mit CLOSE-Taste, und wenn sie auf Form2 sind und klicken Sie auf Zusammenfassung, erscheint FrmSummary und mit dem Parameter zeigen die Daten zu Form2 – BobSki

+1

Dann [übergeben Sie den Schlüssel/Tag/Info im Konstruktor] (http: //stackoverflow.com/a/19261166/1070452) Obwohl jede Instanz ihren eigenen Aktionscode hat, gibt es keinen Grund, warum Sie nicht mehrere Kopien zulassen können. – Plutonix

Antwort

2

Wenn es nur eine frmSummary gibt, können Sie eine singleton machen.

In frmSummary, setzen Sie den folgenden Code ein:

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 

Und Sie würden es von anderen Formen wie diese

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

das ist großartig, vielen Dank – BobSki

1

zugreifen Wenn ich die Frage richtig verstanden habe ....

Sie können einfach die erforderlichen Parameter im Deklarations-Unterverzeichnis New (Wo InitializeComponent() sein soll) einstellen. Deklarieren Sie auf Ihrem Formular Variablen und setzen Sie einen Wert für jeden der Parameterwerte und richten Sie Ihr Formular auf diese Weise ein.

Ein Beispiel könnte sein;

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 

Noch einmal, ich habe die Frage vielleicht missverstanden, also entschuldigen Sie, wenn das der Fall ist.

+0

Sie werden immer noch diese 'InitializeComponent' benötigen, obwohl ... – djv

+0

@david nicht richtig verstanden. Ich mache dasselbe in meiner Bewerbung. Ich wollte nur sicherstellen, dass dies der richtige Weg ist. Vielen Dank! – BobSki

+0

@Verdolino Hoppla, mein Schlechter. Ich meinte, weil das OP es in dem "Load" Event hatte, ich wollte es nicht verpassen – David

Verwandte Themen