Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在vb.net中从调用对象访问数据_Vb.net_Dialog_Showdialog - Fatal编程技术网

如何在vb.net中从调用对象访问数据

如何在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

我在vb.net中有一个窗口窗体“caller”,其中包含一个datagridview,其中有一个特定对象的小概览表,每个对象在第一列中都有自己的ID。现在,如果双击一行,我想显示一个“编辑”对话框,在这个对话框中可以编辑该行的许多详细信息,而我不希望这些信息出现在概览表中

我的方法如下:在调用方表单中,我写了这个调用“编辑”:

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()时,我的编辑表单只是挂起,什么也不做。没有线路,一切正常。