2013-09-11 2 views
1

У меня есть форма с текстовым полем, кнопкой и общедоступной общей собственностью. Кнопка отображает другую форму с видом сетки данных. Когда строка щелкнула в виде сетки данных он принимает значение, которое было выбрано и присваивает его общественную долевую собственность оригинальной формы, а также закрывает формуПередача данных между формами при закрытии формы

Private Sub dgvAllSku_CellContentDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvAllSku.CellContentDoubleClick 
    frmMain.Sku = dgvAllSku.Rows.Item(e.RowIndex).Cells(0).Value 
    Me.Close() 
End Sub 

Теперь то, что я хочу иметь произойдет, поскольку эта форма закрывается, я хочу, чтобы значение (frmMain.Sku) заполнило текстовое поле в исходной форме. Я надеялся, что событие GotFocus будет запущено снова, когда форма представления сетки данных закрывается, и я мог бы использовать это событие, чтобы назначить текстовое поле значению публичного свойства, но это событие фокуса не срабатывает, когда форма закрывается.

Private Sub frmMain_Activated(sender As Object, e As EventArgs) Handles Me.GotFocus 
    txtSku.Text = frmMain.Sku 
End Sub 

Как это сделать?

+0

Есть ли конкретная причина вы пытаетесь избежать ShowDialog? –

+0

Причина была в том, что я не был уверен, как ее использовать, но, прочитав об этом, это путь к уверенности! Спасибо, Ганс! – Brandon

ответ

1

Возможно много способов, но самый быстрый способ, которым я могу думать только подвергать txtSku.Text как общественная собственность, и пусть другие окна просто установить его на себя:

'Define in your main form 
Public Property SkuText() As String 
Get 
    Return txtSku.Text 
End Get 
Set(ByVal value As String) 
    txtSku.Text = value 
End Set 
End Property 

Затем просто установить текст из ваше другое окно:

Private Sub dgvAllSku_CellContentDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvAllSku.CellContentDoubleClick 
    frmMain.SkuText = dgvAllSku.Rows.Item(e.RowIndex).Cells(0).Value 
    Me.Close() 
End Sub 

вы также могли бы вызвать событие, что другая форма подписке, или если у вас нет никаких причин, по-прежнему иметь возможность использовать обе формы сразу, просто использовать ShowDialog и исполнение в основная форма остановится и дождитесь t пользователь должен выбрать ячейку, затем вернуться и легко вытащить выбранное значение из формы, которую он только что показал.

+0

Ты потрясающий, я не могу принять это еще 4 минуты, но я буду! Спасибо! – Brandon

2

Если ваша вторичная форма является модальной, то выставляем публичную собственность в этой форме. Чтобы закрыть этот модальный просто вызов form1.DialogResult = DialogResult.OK. В вашей родительской форме сделать что-то вроде

Dim childModal = new ChildModal 
Dim result childModal.ShowDialog() 
If result = OK then Me.Text1.Text = childModal.ResultValue 

Good Luck ...

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