從主窗口窗體打開第二個窗體,我可以寫入2個值。 我需要在主窗體中的這2個值。從第二個Windows窗體獲取值
此刻,我打開使用
NuovoForm.show()
其中NuovoForm是第二種形式的名字第二種形式。第二種形式有兩個文本字段和一個按鈕,當按鈕被按下時,我如何獲得第一種形式寫入2個字段內的文本?
從主窗口窗體打開第二個窗體,我可以寫入2個值。 我需要在主窗體中的這2個值。從第二個Windows窗體獲取值
此刻,我打開使用
NuovoForm.show()
其中NuovoForm是第二種形式的名字第二種形式。第二種形式有兩個文本字段和一個按鈕,當按鈕被按下時,我如何獲得第一種形式寫入2個字段內的文本?
假設第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
確實,很高興有人救我發帖...... 這是OP尋找的唯一答案。 – Arazio
只需在NuovoForm窗體中創建兩個屬性並從NuovoForm的文本框中設置這些屬性。通過這些新屬性以主要形式獲取這些值。
一個行爲是將子窗體的所有者設置給調用者,在這種情況下是您的主窗體。因此,在子表單中,我們將使用類似這樣的方式:在主窗體中更新主窗體的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#中使用它,我也可以這樣做。
不管怎麼說希望這有助於
另一種選擇是,以顯示你的孩子形式的對話,例如:
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’對話的結果將進入循環。如果在那裏你可以用公共屬性提取數據。這也將使您對數據的檢索時間有很多控制權,例如在表單過早關閉時不檢索數據。
Srsly,有數以百計的教程在那裏 - [這裏](http://www.codeproject.com/Articles/12214 /傳遞值之間的表單在NET-X與C和),[這裏](http:// stackoverflow。COM /問題/ 4587952 /傳遞數據之間-形式)等。只是谷歌它! – Eminem