VB 窗体在同一个项目中不能相互识别

Posted

技术标签:

【中文标题】VB 窗体在同一个项目中不能相互识别【英文标题】:VB Forms don't recognize each other in the same project 【发布时间】:2021-06-23 23:13:28 【问题描述】:

大家好,我需要帮助, 每次我尝试调用窗口窗体时都会遇到奇怪的情况,我会收到此错误

BC30469 对非共享成员的引用需要对象引用。

我最初是在 Visual Studio 2010 上工作,第一次解决这个问题,所以我认为我可能不小心删除或编辑了表单声明中的一些代码导致了问题,所以我关闭了解决方案并创建了一个新的确保问题仅限于解决方案而不是 VS。然后我添加窗口表单“Form2”然后在 Form1 上创建/添加一个 button1 来调用 Form2.Show() 应该可以正常工作的简单代码,但是当我录制 Form2.Show() 时,它会给出错误和红色标记 Form2

所以我卸载了 VS2010 然后重置 Windows 10 并选择清除 Windows 分区上的所有数据(我现在这很极端,但我怀疑系统可能感染了某些病毒“之前的操作”)所以之后我检查了使用 HitmanPro 的系统并没有发现任何东西然后我安装了 VS2019 社区并得到了我在网上搜索但没有发现任何类似情况的一些问题所以我希望有人能解开这个谜。

Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Form2.Show()
End Sub
End Class

Form2 是空表单,我没有对其进行任何更改

在出现此问题之前,现在一切正常,即使旧项目也有同样的问题

谢谢

编辑:添加项目很简单 https://mega.nz/file/FgoXkCwA#ootxYrXGnR6sQR_Pifjvz617-r_Az1ozXWB49oGxqKU 该项目不包含任何可执行文件

【问题讨论】:

在调用 Show() 之前,您需要有一个 Form2 实例的引用。您向我们展示的信息远远不足以帮助您。你认为Form2指的是什么?我们需要查看更多代码。 @JonathanWillcock VB.NET 具有表单自动实例化,例如一位用户想要禁用该功能:vb.net auto instantiation (forms). @AndrewMorton 从来不知道。多么奇怪的功能! Form2 有带参数的构造函数吗? Public Sub New(someThing as someType)? 感谢我提到的所有回复Partial Class,我确实检查/确认它们存在,为什么我现在不发生更奇怪的事情是我无法在 VS2019 上创建 .NET 3.5 或 4.* 新项目(它们没有出现在VS2019)这可能是问题吗? (我的旧项目使用的是 .Net 3.5 和 4.5) 【参考方案1】:

我在调用子表单时通常会这样做:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

' using a Using block:
    Using form2 as New Form2
        form2.ShowDialog(Me)
        form2.Close()
    End Using

' using a With block
    With New Form2
        .ShowDialog(Me)
        .Close()
    End With

End Sub

ShowDialog(Me) 使子表单保持打开状态,直到用户提供DialogResult(通常为OKCancel)。

【讨论】:

以上是关于VB 窗体在同一个项目中不能相互识别的主要内容,如果未能解决你的问题,请参考以下文章

c#如何单击按钮显示另一个窗体

c#如何实现关闭当前窗体并打开另一个已经创建的窗体。

Visual Studio - VB - Windows 窗体项目 - 未声明“变量”。可能无法访问

如何在 VB6 窗体中使用 Microsoft Office Access 的子窗体控件?

如何在windows窗体里面添加窗口

在C#中,如何在一个窗体中调用另一个窗体的数据?