You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET赋值后对象属性仍为null的技术问题求助

问题分析与解决方案

我一眼就揪出问题所在了——你明明创建了frmAddParticipants的实例addparticipants,还给它的movie.movieID赋了值,但最后显示窗体的时候,居然调用的是窗体类的默认实例frmAddParticipants.Show(),完全没用到你刚才初始化并赋值的那个实例!

问题根源

VB.NET有个特殊特性:窗体类会自动生成一个同名的默认实例(比如frmAddParticipants本身就是一个预创建的实例)。你现在的操作相当于:

  1. 新建了实例A,给A的属性赋值
  2. 却打开了另一个完全无关的默认实例B,B的属性自然是null

修正后的代码

把最后一行的frmAddParticipants.Show()改成你创建的实例addparticipants.Show()就搞定了,顺便加个小判断避免空引用:

Private Sub btnAddParticipants_Click(sender As Object, e As EventArgs) Handles btnAddParticipants.Click
    Dim addparticipants As New frmAddParticipants()
    ' 先确保movie对象已经初始化,防止赋值时抛出空引用异常
    If addparticipants.movie Is Nothing Then
        addparticipants.movie = New Movie() ' 这里假设你的movie实体类名为Movie
    End If
    addparticipants.movie.movieID = Split(lstSelection.SelectedItem.ToString(), " ")(0)
    Me.Hide()
    addparticipants.Show() ' 调用你自己创建的实例的Show方法
End Sub

额外提醒

  • 建议在frmAddParticipants的构造函数里提前初始化movie对象,比如添加Me.movie = New Movie(),这样就不用在调用方做判断了。
  • 如果需要在关闭子窗体后回到原窗体,可以考虑用addparticipants.ShowDialog()代替Show(),关闭子窗体后再执行Me.Show()即可。

内容的提问来源于stack exchange,提问作者thmasker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:37:42