在 VB.NET 中的表单之间传递对象的值
Passing values of an object between forms in VB.NET
这是我的问题。
我正在 VB.NET 中创建一个项目,该项目(当前)存在于 1 个 class(这里我们称之为 User.vb)和 2 个 WinForms(frmDisplay 和 frmMain)中。
假设 User.vb 目前看起来像这样:
Public Class User
Private mName As String
Public Sub New(ByVal name As String)
Me.Name = name
End Sub
Public Property Name As String
Get
Return mName
End Get
Set(value As String)
mName = value
End Set
End Property
End Class
假设表单 frmDisplay 只是一个带有文本字段 txtString 和按钮 btnSend 的表单。
Public Class frmDisplay
Dim usr As New User()
Private Sub btnSend_Click(sender As Object, e As EventArgs) Handles btnSend.Click
usr.Name = txtString.Text
frmMain.Show()
Me.Hide()
End Sub
End Class
在表格 frmMain 上,我想获得存储在第一个表格的 class 用户中的 属性 名称中的值。
基本思路是(我知道不行):
Public Class frmMain
Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
lblStoredString.Text = usr.Name << This is where I'm stuck
End Sub
End Class
我用谷歌搜索了我的问题并阅读了很多帖子,但我似乎无法理解它。也许你们可以帮助我。
我是 VB.NET 和 WinForm-stuff 的新手(大约 3 个月的经验),但我过去用 C# 和 webapplications 做过一些编程。
非常感谢您的每一点帮助。
非常感谢!
我的重点是 ASP.NET,我更喜欢 C#,但我会插话。在表单之间提供数据的方法有很多种。第一个想到的是使用某种缓存。这个想法是,一旦缓存对您的程序可用,您就可以在单击按钮时将值添加到缓存中,然后在需要时安全地读取该值。这可以是带有字典的静态 class,或者您可以研究使用 System.Web.Caching 命名空间提供的功能。 http://www.codeproject.com/Articles/8977/Using-Cache-in-Your-WinForms-Applications 有例子。
另一种方法是使用共享数据源。这个概念类似于缓存,但是这将允许您在表单之间传递更复杂的关系数据,假设您的真正目标比您描述的更复杂。这是一个演练:https://msdn.microsoft.com/en-us/library/ms171925.aspx.
您可以快速而肮脏地将值写入某个位置的文本文件,然后从第二个表单中读取值。
最简单的方法可能是为第二种形式定义一个自定义构造函数,并在实例化第二种形式时传递您需要的值。如果可以将第一种形式的值视为 "parameters" 到第二种形式的实例,则这最适合。 Passing a textbox value from one form to another in windows application
声明usr变量Friend
Public Class frmDisplay
Friend usr As New User()
然后可以从其他表格获得
Public Class frmMain
Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
lblStoredString.Text = frmDisplay.usr.Name
End Sub
End Class
VB.NET 的一个怪癖是自动创建的表单具有与 class 名称相同的 public 变量名称。这就是为什么您可以使用 frmMain
而无需创建它(例如 Dim frmMain as New frmMain
)。您可以关闭此行为,但这与您的问题无关。
在整个应用程序中,您是否只会 一个 User.Name
感兴趣?
如果是,则将class改为:
Public Class User
Public Shared Name As String
End Class
然后您可以从任何表单(或应用程序中的任何位置)使用 User.Name
到 get/set 该值。
请注意,如果您愿意,您仍然可以将字段包装在 属性 中:
Public Class User
Private Shared _Name As String
Public Shared Property Name As String
Get
Return _Name
End Get
Set(value As String)
If (value.Trim <> "") Then
_Name = value.Trim
End If
End Set
End Property
End Class
另一方面,如果您想这样做 "properly"...
Public Class frmDisplay
Private usr As User
Private Sub btnSend_Click(sender As Object, e As EventArgs) Handles btnSend.Click
usr = New User(txtString.Text)
Dim f As New frmMain(Me, usr)
f.Show()
Me.Hide()
End Sub
End Class
和 frmMain...
Public Class frmMain
Private myParent As Form
Private usr As User
Sub New(parent As Form, _usr As User)
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
usr = _usr
myParent = parent
End Sub
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Label1.Text = usr.Name
End Sub
Private Sub frmMain_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
myParent.Show()
End Sub
End Class
这里我们实例化frmMain
并将User对象传递给它的构造函数。我们还传递了调用表单,以便我们可以在 frmMain
关闭时再次显示它。
这是我的问题。
我正在 VB.NET 中创建一个项目,该项目(当前)存在于 1 个 class(这里我们称之为 User.vb)和 2 个 WinForms(frmDisplay 和 frmMain)中。
假设 User.vb 目前看起来像这样:
Public Class User
Private mName As String
Public Sub New(ByVal name As String)
Me.Name = name
End Sub
Public Property Name As String
Get
Return mName
End Get
Set(value As String)
mName = value
End Set
End Property
End Class
假设表单 frmDisplay 只是一个带有文本字段 txtString 和按钮 btnSend 的表单。
Public Class frmDisplay
Dim usr As New User()
Private Sub btnSend_Click(sender As Object, e As EventArgs) Handles btnSend.Click
usr.Name = txtString.Text
frmMain.Show()
Me.Hide()
End Sub
End Class
在表格 frmMain 上,我想获得存储在第一个表格的 class 用户中的 属性 名称中的值。 基本思路是(我知道不行):
Public Class frmMain
Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
lblStoredString.Text = usr.Name << This is where I'm stuck
End Sub
End Class
我用谷歌搜索了我的问题并阅读了很多帖子,但我似乎无法理解它。也许你们可以帮助我。
我是 VB.NET 和 WinForm-stuff 的新手(大约 3 个月的经验),但我过去用 C# 和 webapplications 做过一些编程。
非常感谢您的每一点帮助。
非常感谢!
我的重点是 ASP.NET,我更喜欢 C#,但我会插话。在表单之间提供数据的方法有很多种。第一个想到的是使用某种缓存。这个想法是,一旦缓存对您的程序可用,您就可以在单击按钮时将值添加到缓存中,然后在需要时安全地读取该值。这可以是带有字典的静态 class,或者您可以研究使用 System.Web.Caching 命名空间提供的功能。 http://www.codeproject.com/Articles/8977/Using-Cache-in-Your-WinForms-Applications 有例子。
另一种方法是使用共享数据源。这个概念类似于缓存,但是这将允许您在表单之间传递更复杂的关系数据,假设您的真正目标比您描述的更复杂。这是一个演练:https://msdn.microsoft.com/en-us/library/ms171925.aspx.
您可以快速而肮脏地将值写入某个位置的文本文件,然后从第二个表单中读取值。
最简单的方法可能是为第二种形式定义一个自定义构造函数,并在实例化第二种形式时传递您需要的值。如果可以将第一种形式的值视为 "parameters" 到第二种形式的实例,则这最适合。 Passing a textbox value from one form to another in windows application
声明usr变量Friend
Public Class frmDisplay
Friend usr As New User()
然后可以从其他表格获得
Public Class frmMain
Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
lblStoredString.Text = frmDisplay.usr.Name
End Sub
End Class
VB.NET 的一个怪癖是自动创建的表单具有与 class 名称相同的 public 变量名称。这就是为什么您可以使用 frmMain
而无需创建它(例如 Dim frmMain as New frmMain
)。您可以关闭此行为,但这与您的问题无关。
在整个应用程序中,您是否只会 一个 User.Name
感兴趣?
如果是,则将class改为:
Public Class User
Public Shared Name As String
End Class
然后您可以从任何表单(或应用程序中的任何位置)使用 User.Name
到 get/set 该值。
请注意,如果您愿意,您仍然可以将字段包装在 属性 中:
Public Class User
Private Shared _Name As String
Public Shared Property Name As String
Get
Return _Name
End Get
Set(value As String)
If (value.Trim <> "") Then
_Name = value.Trim
End If
End Set
End Property
End Class
另一方面,如果您想这样做 "properly"...
Public Class frmDisplay
Private usr As User
Private Sub btnSend_Click(sender As Object, e As EventArgs) Handles btnSend.Click
usr = New User(txtString.Text)
Dim f As New frmMain(Me, usr)
f.Show()
Me.Hide()
End Sub
End Class
和 frmMain...
Public Class frmMain
Private myParent As Form
Private usr As User
Sub New(parent As Form, _usr As User)
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
usr = _usr
myParent = parent
End Sub
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Label1.Text = usr.Name
End Sub
Private Sub frmMain_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
myParent.Show()
End Sub
End Class
这里我们实例化frmMain
并将User对象传递给它的构造函数。我们还传递了调用表单,以便我们可以在 frmMain
关闭时再次显示它。