如何在vb.net中从调用对象访问数据
我在vb.net中有一个窗口窗体“caller”,其中包含一个datagridview,其中有一个特定对象的小概览表,每个对象在第一列中都有自己的ID。现在,如果双击一行,我想显示一个“编辑”对话框,在这个对话框中可以编辑该行的许多详细信息,而我不希望这些信息出现在概览表中 我的方法如下:在调用方表单中,我写了这个调用“编辑”:如何在vb.net中从调用对象访问数据,vb.net,dialog,showdialog,Vb.net,Dialog,Showdialog,我在vb.net中有一个窗口窗体“caller”,其中包含一个datagridview,其中有一个特定对象的小概览表,每个对象在第一列中都有自己的ID。现在,如果双击一行,我想显示一个“编辑”对话框,在这个对话框中可以编辑该行的许多详细信息,而我不希望这些信息出现在概览表中 我的方法如下:在调用方表单中,我写了这个调用“编辑”: Private Sub dgdata_dbclick(ByVal sender As Object, ByVal e As System.Windows.Forms.D
Private Sub dgdata_dbclick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles dg_data.CellMouseDoubleClick
Dim f_edit As New edit
f_edit.ShowDialog(Me)
End Sub
那很好
然而,在被称为“编辑”的表单中,我需要检查选择了哪个ID,并从数据库加载此数据以进行编辑。我可以通过调用表单“caller”访问一些数据,例如
MsgBox(CType(Me.Owner, caller).Text)
显示“调用者”的窗口标题。但是,我想在datagridview中提取当前选择的ID,或者至少提取包含它的一些变量。在调用方表单中,可以通过计算
dg_data.Item(0, selectedRow).Value.ToString
但我无法访问“caller”中的任何相关信息。我有一个公共类,其中包含一些全局变量,但我也无法访问它们
也许我解决这个问题的策略不是最聪明的方法?基本上,当有人单击概览表中的一行时,我想打开一个非常详细的编辑窗口,但只要编辑窗口打开,就会同时阻止应用程序的其余部分。
谢谢 通常如何将数据导入对象?设置属性或将参数传递给方法或构造函数?为什么会有什么不同呢?决定要使用哪一种,然后在表单中编写代码。如果它是必需的数据,我会建议一个构造函数。只需在表单中编写以下代码: Public Sub New 公共亚新
然后按回车键。这将自动生成一些额外的代码。然后,您可以添加一个字段来存储该值,向构造函数添加一个参数,然后将该参数分配给其中的字段。谢谢您为我指明了正确的路径。 我是这样解决的(效果很好,希望可以接受): 以电话形式:
Private Sub dgdata_dbclick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles dg_data.CellMouseDoubleClick
Dim selectedRow As Integer = dg_data.CurrentCell.RowIndex
Dim f_edit As New edit
f_edit.edit(dg_data.Item(0, selectedRow).Value.ToString)
f_edit.ShowDialog(Me)
f_edit.Dispose()
End Sub
以所称形式:
Public Sub edit(ByVal id As Long) 'Handles MyBase.Load
'Enter commands to prepare your form
End Sub
其思想是将数据传递到第二个表单。当您使用
New
关键字创建第二个表单的实例(我的类称为Form2
,您的类称为edit
)时,会在Form2
上调用Sub-New
Private Sub OpenEditDialog()
Dim f_edit As New Form2(32) '32 is the number you retrieve from your DataGridView
f_edit.ShowDialog(Me)
f_edit.Dispose()
End Sub
Public Class Form2
Private ID As Long
Public Sub New(SelectedID As Long)
InitializeComponent()
ID = SelectedID
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
MessageBox.Show(ID.ToString)
End Sub
End Class
将ID传递给Form2
,并在表单级别设置变量。然后,您可以在表单2中的任何位置使用该变量
Private Sub OpenEditDialog()
Dim f_edit As New Form2(32) '32 is the number you retrieve from your DataGridView
f_edit.ShowDialog(Me)
f_edit.Dispose()
End Sub
Public Class Form2
Private ID As Long
Public Sub New(SelectedID As Long)
InitializeComponent()
ID = SelectedID
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
MessageBox.Show(ID.ToString)
End Sub
End Class
您需要调用InitializeComponent()
,以便显示控件。非常感谢您为我提供有用的关键字和提示。希望我的解决方案是可以接受的风格…不完全是。看到我的答案了。嗯,当我添加InitializeComponent()时,我的编辑表单只是挂起,什么也不做。没有线路,一切正常。