Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.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/1/list/4.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_List_Winforms - Fatal编程技术网

Vb.net 如何创建仅在需要时修改的列表引用?

Vb.net 如何创建仅在需要时修改的列表引用?,vb.net,list,winforms,Vb.net,List,Winforms,我有两个WinForms。在一个WinForm中,我创建了一个类对象的列表(称为问题)。我正试图将该列表复制到使用.ShowDialog调用的模式对话框窗体中。请参阅下面的相关部分 Public Class frmNewGame Friend lstQuestions As New List(Of Question) .... Private Sub btnConfigAdv_Click(sender As Object, e As EventArgs) Handles btnConfigA

我有两个
WinForms
。在一个WinForm中,我创建了一个类对象的
列表
(称为
问题
)。我正试图将该列表复制到使用
.ShowDialog
调用的模式对话框窗体中。请参阅下面的相关部分

Public Class frmNewGame
Friend lstQuestions As New List(Of Question)

....

Private Sub btnConfigAdv_Click(sender As Object, e As EventArgs) Handles btnConfigAdv.Click

    Using frmStackConfig As New frmAdvancedStack
        frmStackConfig.lstStackQuestions = lstQuestions

        If frmStackConfig.ShowDialog() = DialogResult.OK Then
            ' We OK'd the Dialog Window, so now make that form's lstQuestions, THIS form's list of questions.
            ' Additionally, recount and redraw the stats.
            lstQuestions = frmStackConfig.lstStackQuestions

        End If

    End Using
End Sub

....
End Class
正如你所看到的,我正试图复制主要内容。在现在的对话框FORM
frmStackConfig
中,我有关于应该修改该表单列表副本的代码:

lstStackQuestions(dgvQuestions.SelectedRows(0).Cells("dgcQuestionCount").Value).QuestionID = frmFindQuestion.intQuestionNumber
在表单的前半部分,仅当对话框表单捕获到
DialogResult.OK
时,才应复制/修改应修改主表单列表的代码。但是,即使发送了
对话框result.Cancel
,主窗体的列表似乎也会被修改

我发现一个问题/答案似乎为我指明了正确的方向,即使用列表副本进行引用,而不是修改主表单:我尝试用它做以下操作:

        For Each item In lstQuestions
            frmStackConfig.lstStackQuestions.Add(item)
        Next
此外,我尝试了
.AddRange
.CopyTo
但得到了相同的结果。即使在调用
DialogResult.None
DialogResult.Cancel
时,主窗体仍在提取和复制模式窗体的列表副本。理想的结果应该是,只有当父窗体捕获到一个
对话框result.OK


我应该如何对列表进行引用,以确保它不会被子表单修改?

如果需要对象的副本,则必须实际创建该对象的副本。如果您没有在任何地方创建新的
列表(问题)
对象的代码,那么您就不会创建副本。最简单的选择是只需调用
ToList

Dim copy=original.ToList()
另一个选项是显式创建新列表,然后填充它:

Dim副本作为新列表(问题)
副本.添加范围(原件)

如果您想要对象的副本,那么您必须实际创建该对象的副本。如果您没有在任何地方创建新的
列表(问题)
对象的代码,那么您就不会创建副本。最简单的选择是只需调用
ToList

Dim copy=original.ToList()
另一个选项是显式创建新列表,然后填充它:

Dim副本作为新列表(问题)
副本.添加范围(原件)

类是参考类型。查看
Dim a=New MyClass()
然后查看
Dim b=a
a
b
都指向同一个对象实例。您可能想要实现。(例如通过实现接口。)@RezaAghaei谢谢,但我希望在VB.NET中得到一些东西。但是我花了一分钟的时间,但是我在MSDN上找到了这个VB方法的“原始”文档:类是引用类型。查看
Dim a=New MyClass()
然后查看
Dim b=a
a
b
都指向同一个对象实例。您可能想要实现。(例如通过实现接口。)@RezaAghaei谢谢,但我希望在VB.NET中得到一些东西。但这花了我一分钟的时间,但我在MSDN上找到了此VB方法的“原始”文档: