weixin_43186810 2023-09-30 21:43 采纳率: 25%
浏览 14
已结题

VB.NET 父窗体调取子窗体报错

VB.NET 父窗体调取子窗体报: System.NullReferenceException:"未将对象引用设置到对象的实例."?
1、在父窗体调取子窗体过程中总有某几个子窗体调取的先后顺序不同就会报错提示:System.NullReferenceException: "未将对象引用设置到对象的实例." 2、错误过滤都过滤不掉,在运行电脑直接就闪退了。
3、后来发现前一个子窗体的DataGridView只要查询过数据,就会报错,如果没有查询,直接调下一个窗体也不会报错。
4、再后来现有些电脑运行会报有些电脑又不会报,苦恼死了

  Public Function 打开菜单(Form As Form)’赋值子窗体调用
        Try
            Form.MdiParent = 主页2'父窗体
            Form.Size = New Size(My.Computer.Screen.Bounds.Height.ToString, My.Computer.Screen.Bounds.Width.ToString)
            Form.WindowState = FormWindowState.Maximized '最大化
            Form.Activate()
            Form.Show()
            Form.BringToFront()
            Form.ControlBox = False
            Form.TopLevel = False
            Form.ShowIcon = False
            Form.ShowInTaskbar = False
            主页2.菜单选定指定项(Form.Text)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
            WriteLog(Msg:=ex.Message)
        Finally

        End Try
        Return 0
    End Function

img

  • 写回答

15条回答 默认 最新

  • 专家-赤兔[在线] 2023-09-30 21:45
    关注
    获得0.45元问题酬金

    以下回复引自强大而免费的微信小程序:皆我百晓生。如有帮助,还望采纳。


    这个错误通常是由于使用了未实例化的对象而导致的。可能的原因和解决方法如下:

    1. 检查代码中是否有未实例化的对象。确认您在调用子窗体的时候,所有必要的对象都已经实例化。

    2. 确保在调用子窗体之前,已经执行了所有必要的初始化操作。例如,如果子窗体需要访问DataGridView中的数据,确保在调用子窗体之前已经完成了数据查询操作,并且DataGridView对象已经被正确的实例化。

    3. 确保在子窗体中对DataGridView进行操作时,先检查DataGridView是否为null。可以使用条件语句(如If语句)来检测并处理可能为空的情况,以避免出现NullReferenceException错误。

    4. 如果您的代码中使用了多线程操作,确保在访问共享资源(如DataGridView)时进行正确的线程同步,以避免出现并发访问的问题。

    5. 确保您的电脑上已经安装了所需的.NET Framework版本,并且它们是正常工作的。

    如果以上方法仍然无法解决问题,建议您在报错的代码位置处使用调试工具来进一步查看错误信息和调用堆栈,并进行适当的排查和调试。

    评论 编辑记录
  • threenewbee 2023-09-30 21:48
    关注
    获得0.90元问题酬金

    给你的参数换一个名字,比如叫 Form1
    因为 Form 本身在你的程序里即是对象名,又是父类的类名,冲突了。

    评论
  • AICodeThunder 2023-09-30 21:52
    关注
    获得0.15元问题酬金

    System.NullReferenceException通常发生在尝试访问或操作一个空引用时在您提供的情况中,我的推测是这样的。
    Form.Show()是.NET框架中用于显示窗体的方法这个异常可能由以下几种情况引发:

    1.尝试访问未初始化的对象:如果你正在尝试访问一个未初始化的对象或其属性,将会引发NullReferenceException例如,如果你有一个未初始化的Form对象,并尝试调用.Show()方法,将会发生这种情况

    示例:

    Form form = null;
    form.Show();  // 这将引发NullReferenceException
    

    2.控件未添加到窗体:如果你在窗体上使用某个控件(如Button,Label等),但在调用.Show()之前没有将该控件添加到窗体中,那么也可能会引发NullReferenceException

    示例:

    Button button = new Button();
    button.Show();  // 这将引发NullReferenceException,因为button没有添加到窗体中
    

    解决方法:

    1.确保你正在操作的对象的实例已经初始化例如,如果你有一个Form对象,确保它已经初始化:

    Form form = new Form();
    form.Show();  // 这是正确的
    

    2.如果你正在使用控件,确保在调用.Show()之前将其添加到窗体中:

    Button button = new Button();
    form.Controls.Add(button);
    button.Show();  // 这是正确的
    

    希望可以帮助您!(因为没有CSDN里没有csharp的语言,暂时用C代替,但是复制到您的代码中是可以的)

    这里,似乎找到了一个bug:
    Form这个参数有Bug。因为它既是你想用的参数名称,又是父类的名称,导致计算机不知道你到底想用参数还是用父类的名称,整个程序乱了,就会导致报错。

    评论 编辑记录
  • 「已注销」 2023-09-30 22:23
    关注

    在VB.NET中,System.NullReferenceException这个错误通常表示你试图访问一个尚未实例化(或者说,还没有创建)的对象的成员这可能是因为你在创建子窗体对象之前就试图访问它,或者子窗体对象在访问时已经被销毁

    这是一个可能的解决方案:

    确保在你访问子窗体对象之前已经创建了它例如,如果你有一个名为childForm的子窗体对象,你需要像这样创建它:

    Dim childForm As New ChildForm()
    

    然后,你可以安全地访问childForm的成员

    另一个可能的问题是,你可能正在试图访问一个已经被销毁的子窗体对象如果在子窗体关闭后你还试图访问它的成员,你将得到NullReferenceException为了避免这个问题,你需要在子窗体关闭后将任何对它的引用设置为Nothing

    childForm.Close()
    childForm = Nothing
    

    注意,这只是一个可能的解决方案实际的解决方案取决于你的具体代码和你如何使用子窗体对象如果你能提供更多的上下文信息,我可能会更能提供有针对性的帮助

    评论
  • coder_small_bell 2023-09-30 23:18
    关注
    获得0.30元问题酬金

    那个就是空指针异常。

    评论
  • 杨得江-君临天下wyj 2023-10-01 07:55
    关注
    获得0.60元问题酬金
    
    Dim childForm As New ChildForm()
    
    
    
    childForm.Close()
    childForm = Nothing
    
    
    
    评论
  • 急速光粒 2023-10-01 10:11
    关注
    获得0.60元问题酬金

    可以尝试看下错误对战,找一下问题。

    评论
  • 数据大魔王 2023-10-01 10:48
    关注
    获得0.60元问题酬金

    在访问或操作某个对象时,该对象实际上不包含对应的实例(即为Null)。这可能发生在您使用了一个未初始化的对象或者在使用之前未给其赋值。

    1. 确认出现错误的代码行并找出可能引发NullReferenceException的代码部分。
    2. 根据代码确定哪个对象引发了NullReferenceException。
    3. 在引发NullReferenceException之前,确保该对象已经通过实例化或赋值进行初始化。
    4. 确保在引入对象之前,对象已经初始化并赋予了有效的引用。
      另外,考虑以下几点来避免NullReferenceException错误的发生:
    5. 在使用任何对象之前,确保对象已经通过实例化或赋值进行初始化。
    6. 在需要使用的对象上使用断言/判空操作,以避免在处理Null对象时引发错误。
    7. 确保需要的数据已经正确加载和处理,如查询数据库或其他外部资源。

    此外,如果在某些电脑上报错而在其他电脑上不报错,可能与环境或配置有关。可以检查这些电脑的配置差异,确保软件所需的依赖项和配置在每台电脑上一致。

    评论
  • 心梓知识 2023-10-03 01:14
    关注
    获得0.45元问题酬金

    结合GPT给出回答如下请题主参考
    可能是因为您在调用子窗体时,子窗体的实例未被正确地创建或初始化。以下是可能导致此异常的一些常见原因:

    1.未正确地实例化子窗体:在调用子窗体之前,您需要在父窗体中实例化子窗体。确保使用关键字 "New" 来创建新的子窗体对象。

    2.未将子窗体添加到父窗体的 Controls 集合中:在创建子窗体之后,您需要将其添加到父窗体的控件集合中。在调用子窗体的 Show() 或 ShowDialog() 方法之前,将子窗体添加到父窗体的 Controls 集合中。

    以下是一个示例代码,演示如何正确地实例化和调用子窗体:

    Public Class ParentForm
        Private Sub btnOpenChildForm_Click(sender As Object, e As EventArgs) Handles btnOpenChildForm.Click
            ' 实例化子窗体
            Dim childForm As New ChildForm()
    
            ' 将子窗体添加到父窗体的 Controls 集合中
            Me.Controls.Add(childForm)
    
            ' 调用子窗体的 Show() 方法
            childForm.Show()
        End Sub
    End Class
    

    在此示例中,我们首先实例化子窗体,然后将其添加到父窗体的 Controls 集合中,最后调用子窗体的 Show() 方法以显示子窗体。

    请注意,如果您的应用程序包含多个子窗体,则需要针对每个子窗体重复此过程。确保在调用子窗体时也将其正确地从父窗体的 Controls 集合中移除。

    评论
  • 关注
    获得0.45元问题酬金

    报错似乎与前一个子窗体的DataGridView有关。请确保在调用下一个子窗体之前,前一个子窗体的DataGridView对象不为空。您可以使用条件语句来检查DataGridView对象是否为空,例如If dataGridView1 IsNot Nothing Then

    评论
  • 技术宅program 2023-10-07 09:57
    关注
    获得0.45元问题酬金
    评论 编辑记录
  • yy64ll826 2023-10-07 16:00
    关注
    获得0.30元问题酬金
    评论
  • Minuw 2023-10-07 17:15
    关注
    获得0.45元问题酬金

    参考gpt
    这个报错通常是因为在代码中访问了一个空引用(Null Reference)。根据你的描述,可能是在调用子窗体的过程中,某些子窗体的对象没有正确初始化或者被释放了。

    你可以尝试在调用子窗体之前检查对象是否为空,例如:

    If Form IsNot Nothing Then
        ' 调用子窗体的代码
        Form.MdiParent = 主页2 '父窗体
        Form.Size = New Size(My.Computer.Screen.Bounds.Height.ToString, My.Computer.Screen.Bounds.Width.ToString)
        ' ...
    Else
        ' 对象为空的处理逻辑
        MessageBox.Show("子窗体为空")
    End If
    

    这样可以避免调用空引用的对象而导致的异常。另外,你也可以在调用子窗体之前先检查父窗体是否为空,以确保父窗体对象也正确初始化。

    评论
  • GIS工具开发 2023-10-07 21:32
    关注
    获得0.45元问题酬金

    调用之前先实例化

    评论
  • 会跑的小鹿 2023-10-07 22:03
    关注
    获得0.30元问题酬金

    得先实例化,再进行调用

    评论

报告相同问题?

问题事件

  • 系统已结题 10月8日
  • 修改了问题 10月1日
  • 创建了问题 9月30日

悬赏问题

  • ¥20 有人能代写linux应用吗?有偿,酬金可商量,具体要求联系我
  • ¥15 神经网络建立应力预测模型
  • ¥20 反编译一款APP手游,解密出lua脚本。
  • ¥15 改一下,代码,让代码符合要求
  • ¥15 报错问题,只有两个错误,如图片所示,i多次初始化
  • ¥15 matlab runtime 如何收费
  • ¥15 Tpad api账户 api口令
  • ¥30 ppt进度条制作,vba语言
  • ¥15 生信simpleaffy包下载
  • ¥15 在二层网络中,掩码存在包含关系即可通信