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

.NET Core 3.1设置Form2.MdiParent为Form1报错,Framework可正常运行

.NET Core 3.1中设置MdiParent报错的问题分析与解决

错误原因

在.NET Framework的VB.NET中,编译器提供了默认窗体实例的语法糖——直接使用窗体类名(如Form2)时,会自动访问一个预创建的实例。但.NET Core 3.1及后续版本移除了这个特性,所有非共享成员(包括MdiParent)必须通过具体的对象实例访问,直接用类名调用就会触发Reference to a non-shared member requires an object reference错误。

解决方案

1. 手动创建Form2实例并设置MdiParent

修改Form1的Form1_Load事件代码,先实例化Form2,再设置父窗体并显示:

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' 手动创建Form2实例
        Dim form2 As New Form2()
        ' 设置MDI父窗体为当前Form1实例
        form2.MdiParent = Me
        ' 显示Form2
        form2.Show()
    End Sub
End Class

2. 关键前置设置

确保Form1的IsMdiContainer属性已设为True:

  • 可以在设计器中选中Form1,在属性面板找到IsMdiContainer并勾选;
  • 也可以在代码中手动设置:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.IsMdiContainer = True ' 先开启MDI容器模式
    Dim form2 As New Form2()
    form2.MdiParent = Me
    form2.Show()
End Sub

3. 持久化Form2实例(可选)

如果需要在Form1的其他方法中访问同一个Form2实例,可将实例变量声明为类级成员:

Public Class Form1
    ' 类级变量存储Form2实例
    Private _form2Instance As Form2

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.IsMdiContainer = True
        _form2Instance = New Form2()
        _form2Instance.MdiParent = Me
        _form2Instance.Show()
    End Sub

    ' 示例:其他方法中访问Form2实例
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        _form2Instance.Activate()
    End Sub
End Class

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 04:45:44