2016-01-13 136 views
-1

從主窗口窗體打開第二個窗體,我可以寫入2個值。 我需要在主窗體中的這2個值。從第二個Windows窗體獲取值

此刻,我打開使用

NuovoForm.show() 

其中NuovoForm是第二種形式的名字第二種形式。第二種形式有兩個文本字段和一個按鈕,當按鈕被按下時,我如何獲得第一種形式寫入2個字段內的文本?

+2

Srsly,有數以百計的教程在那裏 - [這裏](http://www.codeproject.com/Articles/12214 /傳遞值之間的表單在NET-X與C和),[這裏](http:// stackoverflow。COM /問題/ 4587952 /傳遞數據之間-形式)等。只是谷歌它! – Eminem

回答

0

假設第1形式的名稱是「Form1」和「NuovoForm」上的控制是「TextBox1」,「TextBox2」和「Button1

您可以使用下面的代碼:

Form 1代碼:

Public Class Form1 
    Public Value1 As String, value2 As String 
    ' 
    ' 
    ' 
End Class 

NuovoForm代碼:

Public Class NuovoForm 

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
     Form1.Value1 = TextBox1.Text 
     Form1.value2 = TextBox2.Text 
     Me.Hide() 
     Form1.Show() 
    End Sub 

End Class 

現在,您可以使用值1和值2做任何你想在Form1

+0

確實,很高興有人救我發帖...... 這是OP尋找的唯一答案。 – Arazio

0

只需在NuovoForm窗體中創建兩個屬性並從NuovoForm的文本框中設置這些屬性。通過這些新屬性以主要形式獲取這些值。

0

一個行爲是將子窗體的所有者設置給調用者,在這種情況下是您的主窗體。因此,在子表單中,我們將使用類似這樣的方式:在主窗體中更新主窗體的TextBox1和兩個公共屬性。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     If Me.Owner IsNot Nothing Then 
      Dim MainForm As Form1 = CType(Me.Owner, Form1) 

      MainForm.TextBox1.Text = Me.TextBox1.Text 
      MainForm.Item1 = 1 
      MainForm.Item2 = "Hello, made this change in child form" 
     Else 
      Console.WriteLine("Owner not set") 
     End If 
    End Sub 

In the main form we call the child form 

    mChildForm = New ChildForm 
    mChildForm.Owner = Me 
    mChildForm.Show() 

I have a complete `demonstration project` on Microsoft OneDrive or see code below 

Main form 
Public Class Form1 
    Private mChildForm As ChildForm 
    Private mFirstTime As Boolean = True 
    Public Property Item1 As Integer 
    Public Property Item2 As String 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     DoFormWork() 
    End Sub 
    Private Sub DoFormWork() 
     If Not ((From f In My.Application.OpenForms.Cast(Of Form)() Where f.Name.Equals("ChildForm") Select f.Name).ToList.Count > 0) Then 
      mChildForm = New ChildForm 
      mChildForm.Owner = Me 
      mFirstTime = True 
     End If 
     mChildForm.Show() 
     If mFirstTime Then 
      mChildForm.Location = New Point(Me.Left + Me.Width, Top) 
      mFirstTime = False 
     End If 

     If chkPushText.Checked Then 
      mChildForm.TextBox1.Text = Me.TextBox1.Text 
     End If 
    End Sub 

    Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing 
     If mChildForm IsNot Nothing Then 
      mChildForm.Dispose() 
     Else 
      Console.WriteLine("mChildForm is Nothing") 
     End If 
    End Sub 
    Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles Me.Shown 

     Controls.OfType(Of Control).ToList.ForEach(
      Sub(x) 
       If TypeOf x Is TextBox Then 
        AddHandler x.Click, 
         Sub(s As System.Object, a As System.EventArgs) 
          Dim tb As TextBox = CType(x, TextBox) 
          If Not String.IsNullOrEmpty(tb.Text) Then 
           DoFormWork() 
           mChildForm.TextBox1.Text = tb.Text 
          End If 
         End Sub 
       End If 
      End Sub) 

     mChildForm = New ChildForm 
     mChildForm.Owner = Me 
     mChildForm.Show() 
     mChildForm.Location = New Point(Me.Left + Me.Width, Top) 
     mFirstTime = False 
     My.Application.OpenForms(0).Activate() 
     DoFormWork() 
    End Sub 
    Private Sub Form1_LocationChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LocationChanged 
     If Not mFirstTime Then 
      mChildForm.Location = New Point(Me.Left + Me.Width, Top) 
     End If 
    End Sub 

End Class 

子窗體

Public Class ChildForm 
    Public Sub New() 
     InitializeComponent() 
    End Sub 
    Private Sub cmdClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdClose.Click 
     Close() 
    End Sub 
    Private Sub cmdHideMe_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdHideMe.Click 
     Hide() 
    End Sub 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     If Me.Owner IsNot Nothing Then 
      Dim MainForm As Form1 = CType(Me.Owner, Form1) 

      MainForm.TextBox1.Text = Me.TextBox1.Text 
      MainForm.Item1 = 1 
      MainForm.Item2 = "Hello, made this change in child form" 
     Else 
      Console.WriteLine("Owner not set") 
     End If 
    End Sub 
End Class 

注意,這裏的代碼一個很好的協議,它其他的事情除了你問什麼,因爲它的東西,幾年前我做了,但是,因爲它表明相關如何與父母對孩子形式進行互動。現在,如果我們在C#中做了這些事情,還需要發生一些事情,所以現在這是一個vb.net的事情,而任何人都想在C#中使用它,我也可以這樣做。

不管怎麼說希望這有助於

-1

另一種選擇是,以顯示你的孩子形式的對話,例如:

Dim frmDia As New NuovoForm 
    frmDia.TopMost = True 
    frmDia.StartPosition = FormStartPosition.CenterScreen 
    If frmDia.ShowDialog = Windows.Forms.DialogResult.OK Then 
     ' Get data here 
    End If 

在你的孩子的形式,通過將下面的行關閉表格「關閉」按鈕:

DialogResult = Windows.Forms.DialogResult.OK 

一旦形式與封閉的‘OK’對話的結果將進入循環。如果在那裏你可以用公共屬性提取數據。這也將使您對數據的檢索時間有很多控制權,例如在表單過早關閉時不檢索數據。