2016-11-10 45 views
1

私のアプリケーションには現在5つのフォームがあります。私は6番目のフォームを作成しています - しかし、私はすべてのフォームからアクセスできるようにしたいと思います。 in frmSummary私はそのフォームに関連するデータを表示するDataGridViewを追加する予定です。私はclick_eventで、私は現在の道をVB.Netの2つのフォーム間でパラメータを渡す

frmName ="CustomerInfo" 

ような何かをするだろうように、私はcmdSummaryボタンを持つことになり、私は、各フォームでは、このような

dim FrmName as String 

などのグローバル変数を作成する必要がありますいずれかのことを考えています私のアプリケーションは...私はMDIFormのをHVEと私は何かなどを行う新しい形を開くにして、その中で、各フォームが子供であることを

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 

ですだから私は私のNEを開くにはそのような何かを設定されていますw形。私の質問はここに私が達成しようとしているものを、現在のです....

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 

....どのように私は私のfrmSummaryフォームにパラメータを渡すことができるスマートなアイデアのようなものですか?または私は/私は直接前のフォームから関数を呼び出すことができますか? ちょうど私が正しい道にいるかどうかを確認しようとしています。もしそうでなければ、どうすればいいのですか?

+0

2つのフォームでfrmSummaryを表示する必要がある場合はどうなりますか? – Plutonix

+0

彼らは5つのフォームのうち1つからfrmSummaryにアクセスすることができます(frmSumarryからクローズし、別のフォームからアクセスできるまで)。基本的にはform1上にあるかもしれないし、summaryをクリックする。 FrmSummaryは実際にフォーム内で開きます。私はちょうどfrmSummaryに値を渡して、それに直接関係するデータを表示できるようにするのが妥当な方法です。彼らはクローズボタンでfrmSummaryを閉じ、Form2上にあってSummaryをクリックすると、frmSummaryがポップアップし、パラメータにform2に関連するデータが表示されます – BobSki

+1

[コンストラクタでキー/タグ/情報を渡す](http: //stackoverflow.com/a/19261166/1070452)各インスタンスには独自のアクションコードがありますが、複数のコピーを許可できない理由はありません – Plutonix

答えて

2

frmSummaryが1つのみの場合は、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()とする)に必要なパラメータを設定するだけです。あなたのフォームで、変数を宣言し、それぞれのパラメータ値に1を設定し、このようにフォームを設定します。

例があります。

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

@ダビデあなたは正しく理解していません。私は私のアプリケーションで同じことをやっています。私はちょうどこれが正しい方法であることを確認したかったのです。ありがとうございました! – BobSki

+0

@Verdolinoおっと、私の悪いです。私はOPが「Load」イベントでそれを持っていたので、私はそれを見逃すつもりはなかったことを意味した – David

関連する問題