2016-07-21 4 views
0

Как вы ссылаетесь на существующий объект в vb.net?Как ссылаться на существующий объект в VB.net?

Чтобы описать мою проблему более конкретно, у меня есть моя основная форма Form1, которая загружается при запуске приложения. Form1 имеет datagridview dgv1. У меня есть другая форма form2 в проекте с кучей текстовых полей. При нажатии кнопки на Form1 я создаю экземпляр form2. От form2 как я могу ссылаться на существующие form1 на заполнение dgv1 с помощью ввода texboxes на form2?

+0

Рассмотрите возможность добавления методов в формы, чтобы FormA мог указать FormB заполнить * свои собственные * элементы управления. – Plutonix

+0

Почему бы вам не попробовать 'module'? – hrishikesh

ответ

0

Вам необходимо передать ссылку на номер Form1 на номер Form2. Используйте Me ключевое слово, чтобы получить ссылку на объект, в настоящее время выполнения:

В Form1.vb:

Sub Form1_OpenForm2() 

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

В Form2.vb:

Private _form1 As Form1 

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

Элементы управления Windows Forms по умолчанию не являются общедоступными, поэтому ему также необходимо сделать элементы управления, которые ему нужны в Public Form1, или написать публичные свойства для конкретных вещей, которые он хочет сделать. –

+0

@JoelCoehoorn - элементы управления являются 'Friend' по умолчанию, поэтому должно быть хорошо, чтобы получить доступ из другой формы –

0

Легко исправить: Вы можете получить доступ контроль на Form1напрямую от Form2

Так что если у вас есть DataGridView1 на Form1, в Form2 код, который вы можете получить доступ к нему с помощью Form1.DataGridView1

Примечание: это не хороший дизайн, потому что вы плотно сцепления ваши две формы, вы бы лучше, чтобы передать ссылку к DataGridView в Form2, а не обновляя его непосредственно

в застройщиком 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 

Тогда при создании Form2 из Form1, используйте ссылку, как это:

Dim f2 = New Form2(Me.DataGridView1) 
f2.Show() 
Смежные вопросы