2016-07-21 6 views
0

どのようにvb.netの既存のオブジェクトを参照していますか?VB.netで既存のオブジェクトを参照するには?

私の問題をより具体的に説明するために、アプリケーションを起動するときにロードするメインフォームForm1があります。 Form1には、データグリッドビューdgv1があります。私は別のフォームform2をテキストボックスの束でプロジェクトに持っています。 Form1のボタンをクリックすると、form2のインスタンスが作成されます。 form2から、既存のform1を入力して、dgv1に入力してください。form2に入力してください。

+0

フォームにメソッドを追加すると、FormAはFormBに独自の*コントロールを設定するよう指示できます。 – Plutonix

+0

'module'を試してみませんか? – hrishikesh

答えて

0

Form1Form2への参照を渡す必要があります。

Form1.vbで:

Sub Form1_OpenForm2() 

    Dim form2 As New Form2() 
    form2.AcceptForm1(Me) 
    form2.Show() 
End Sub 

Form2.vbで:オブジェクトへの参照は、現在実行し得るためにMeキーワードを使用し

Private _form1 As Form1 

Public Sub AcceptForm1(form1 As Form1) 
    _form1 = form1 
End Sub 
+0

Windowsフォームコントロールはデフォルトではパブリックではありませんので、彼はForm1で必要なコントロールを作成したり、パブリックプロパティを作成して、自分ができるようにしたいことが必要になります。 –

+0

@JoelCoehoorn - コントロールはデフォルトで 'Friend'ですので、別のフォームからアクセスするには問題ありません –

0

簡単修正:あなたは直接Form1上のコントロールにアクセスすることができますからForm2

あなたはForm1DataGridView1を持っているのであれば、Form2コードで、あなたはForm1.DataGridView1

注意を使用してアクセスできます。これは、あなたがしっかりとあなたの2つの形式が結合されているので、あなたが参照を渡す方が良いだろう、良いデザインではありませんForm2の中のDataGridViewに直接ではなく

それを更新するのForm2のコンストラクタで、あなたの参照を渡すためにそれを強制:

Public Class Form2 
    Private _dgv As DataGridView 
    Public Sub New(dgv As DataGridView) 

     ' This call is required by the designer. 
     InitializeComponent() 

     ' Add any initialization after the InitializeComponent() call. 

     'ensure we have a value object 
     If dgv Is Nothing Then Throw New ArgumentNullException("DataGridView") 
     _dgv = dgv 
    End Sub 

    Private Sub frmRibbonTest_Resize(sender As Object, e As EventArgs) Handles Me.Resize 
     Dim rect = RibbonControl1.ClientRectangle 
     DataGridView1.Location = New Point(rect.X, rect.Y) 
     DataGridView1.Height = rect.Height 
     DataGridView1.Width = rect.Width 
    End Sub 
End Class 

あなたはForm1のからのForm2を作成するときに、このようなあなたの参照を使用します。

Dim f2 = New Form2(Me.DataGridView1) 
f2.Show() 
関連する問題