VB.NET赋值后对象属性仍为null的技术问题求助
问题分析与解决方案
我一眼就揪出问题所在了——你明明创建了frmAddParticipants的实例addparticipants,还给它的movie.movieID赋了值,但最后显示窗体的时候,居然调用的是窗体类的默认实例frmAddParticipants.Show(),完全没用到你刚才初始化并赋值的那个实例!
问题根源
VB.NET有个特殊特性:窗体类会自动生成一个同名的默认实例(比如frmAddParticipants本身就是一个预创建的实例)。你现在的操作相当于:
- 新建了实例A,给A的属性赋值
- 却打开了另一个完全无关的默认实例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
相关产品推荐
相关产品推荐

