[VB.NET]对象引用未设置为对象的实例

[VB.NET]对象引用未设置为对象的实例,vb.net,datagridview,Vb.net,Datagridview,我试图将datagridview中选定行的列的值添加到集合中(但若使用列表或数组执行此操作,则会出现相同的错误) 代码: Dim zdgv = MyDataGridView For a = 0 To zdgv.SelectedRows.Count - 1 MsgBox(zdgv.Rows(zdgv.SelectedRows(a).Index).Cells(0).Value.ToString) Try MyCollection.A

我试图将datagridview中选定行的列的值添加到集合中(但若使用列表或数组执行此操作,则会出现相同的错误)

代码:

Dim zdgv = MyDataGridView

    For a = 0 To zdgv.SelectedRows.Count - 1

        MsgBox(zdgv.Rows(zdgv.SelectedRows(a).Index).Cells(0).Value.ToString)
        Try
            MyCollection.Add(zdgv.Rows(zdgv.SelectedRows(a).Index).Cells(0).Value.ToString)
        Catch ex As Exception
            MsgBox(ex.Message)
            MsgBox(ex.InnerException)
        End Try

    Next
ex.Message=对象引用未设置为对象的实例

ex.InnerException=空

ex.InnerException.Message=使程序崩溃,转到代码屏幕, 高亮显示MsgBox(ex.InnerException)行,并给出错误:Object 引用未设置为对象的实例

其他信息: 在zdgv上使用QuickWatch可以提供所有信息。在它后面的行上使用它(zdgv)表示:“Rows”未声明。由于其保护级别,可能无法访问

是的,我在谷歌上搜索过,但没有一个问题是类似的。是的,我在这里搜索过,但没有信息。我也试过r/visualbasic-没什么。。。 我甚至试着用这个错误搜索与c有关的东西——什么都没有/

提前谢谢

EDIT1:我尝试在新项目中创建非数据绑定的datagridview,并将其中的一个值添加到集合中-相同的错误。我想我应该在谷歌上搜索“将对象引用设置为对象实例”

EDIT2:这是一个失败的新手错误

EDIT3:在上使用quickwatch

zdgv.Rows(zdgv.SelectedRows(a).Index).Cells(0).Value.ToString 

它显示正确的值(正确的,没有抛出错误)=“1”。

ex.InnerException为null,您尝试访问is消息属性。这是正常的行为。 你应该试试这样的东西

        Try
            MyCollection.Add(zdgv.Rows(zdgv.SelectedRows(a).Index).Cells(0).Value.ToString)
        Catch ex As Exception
            MsgBox(ex.Message)
            If ex.InnerException IsNot Nothing Then
                 MsgBox(ex.InnerException)
            End if
        End Try

只有子方法在InnerException下抛出异常时,InnerException才不是空的。

这段代码对我来说就像一个符咒

你忘了在你的MyCollection上有一个新的吗

Dim zdgv = MyDataGridView
Dim MyCollection As New Collection
For a = 0 To zdgv.SelectedRows.Count - 1

    MsgBox(zdgv.Rows(zdgv.SelectedRows(a).Index).Cells(0).Value.ToString)
    Try
        MyCollection.Add(zdgv.Rows(zdgv.SelectedRows(a).Index).Cells(0).Value.ToString)
    Catch ex As Exception
        MsgBox(ex.Message)
        If ex.InnerException IsNot Nothing Then
            MsgBox(ex.InnerException)
        End If
    End Try
Next
在代码顶部-在公共类类名的正下方和第一个子类的上方 我收集了这个:Public XXXXX

您不需要“创建
集合的实例”
,然后尝试向其中添加一些项目

应该是:

Public XXXXX作为新收藏

或者您需要在访问它之前在其他地方创建一个新实例


XXXXX=新系列

我找到的最佳解决方案 基本上,错误在于代码使用了不存在的行

您只需将datagridview
allowUserToAddress
属性设置为false。然后所有的正常循环都会正常工作

Dim zdgv = DataGridView1
For Each row As DataGridViewRow In zdgv.Rows
    ListBox2.Items.Add(row.Cells(1).Value.ToString) 
Next


MK:)

您正在引用的对象或属性之一是
null
。你知道错误发生在哪一行吗?@valverij你知道错误发生在哪一行吗?可能是
Try
Catch
之间的单行线;-)什么是MyCollection的可能重复你忘了在上面做一个新的吗?在代码的顶部-就在
public class classname
的下面和第一个子目录的上面,我有这样一个:
public eilutesnumeriukas As Collection
CSharp Basic.NET?:VB.NET中的D
null
=
,顺便说一句,也许我错了,但如果不是ex,那就是
。InnerException什么都不是,
…我用它来尝试查找错误,但还是要感谢这两种方法。目前,我们正在尝试使用SimpleDataGridView在新项目上实现这一点。将查看错误是否重复。@ZebriukasDryžiukas如果您最初的问题不是关于ex.InnerException,请告诉debug并提供有关中断的更多信息part@Matíasfidelizer
If Not(…)Is Nothing
If(…)Is Nothing
VB.Net
中完全相同,谢谢。成功了。非常感谢你。我的城市是立陶宛最受游客欢迎的城市之一——它是Telsiai。如果你来这里,我给你拿瓶啤酒。说真的。@ZebriukasDryžiukas我会记得:)你只邀请Matt吗?给每个人免费啤酒!我们知道俄罗斯人是优秀的黑客,我们也知道他们喜欢伏特加。所以我可以假设啤酒可以提高编程技能,对吗?是的@Matt已经回答了-还是谢谢。另外,我在这个线程中使用了MyCollection名称,以减少与未知单词的混淆。
For i as integer = 0 to datagridView1.rows.count - 2
    'enter code here

Next