.net - 如何在多项目、单一解决方案环境(VS2012)中调用Forms?

标签 .net vb.net winforms

这部分与此线程有关 Combining two projects and get a single .sln file .
在这些项目上调用表单的正确语法是什么。例如,如果 Solution1 包含 Project1 和 Project2,...并且... Project1 有 Form1.vb 并且 Project2 有 Form1.vb。那么从 Project1 中的 Form1.vb 调用 Project2 中的 Form1.vb 的语法是什么(假设有一个按钮可以在单击事件时单击并打开表单)。
但是,请注意,我已将 Project1 和 Project2 添加到 Solution1,并添加了对 My Project.Resources.Designer.vb.dll 的引用。
但是当我尝试从 Project1 调用 Project2 中的 Form1.vb 时,出现语法错误 - Project2.Form1 未定义。
有人可以指出我正确的方向吗?
任何帮助是极大的赞赏。提前致谢。

Project1 是粗体,因此是启动项目。
enter image description here

项目 1 的公开课 Form1:-
enter image description here

项目2的公开课Form1:-
enter image description here

错误信息: -
enter image description here

没有选择“导入命名空间”的选项:-
enter image description here

这是表单 Project1 的样子:-
enter image description here

我的引用管理器 => 解决方案选项为空
enter image description here

比方说,如果我想在上面的解决方案 => 项目选项中浏览到引用文件,我应该选择哪种文件类型??一种。 Visual Basic 项目文件 B.用户文件 C. VSPSCC 文件
enter image description here

如何从 Project1(启动项目)调用 Form1(在 olAddIn_With_Form1 中)?

回答:

通过引用管理器窗口添加 .dll 然后浏览到 ...\bin\Debug\olAddIn_With_Form1.dll

将 myolAddIn_With_Form1Form1 调暗为新的 olAddIn_With_Form1.Form1
myolAddIn_With_Form1Form1.ShowDialog()
enter image description here

对于踢球,我尝试通过“添加为链接”方法添加整个项目,但收到此错误消息
enter image description here

最佳答案

所以,用一些截图来回答:

首先创建您的两个项目。作为启动项目的项目(在您和我的示例中,即 Project1)需要了解其他解决方案。为此,我们需要添加对项目的引用,右键单击 Project1 并单击“添加引用...”

add reference to startup project

然后,使用侧栏中的解决方案选项,单击 Project2 上的复选框

select second project

然后您可以使用 Project2.Form1 标识符在您的代码中添加项目,因此

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim frmOtherProject As New Project2.Form1
        frmOtherProject.Show()
    End Sub
End Class

或者,如果您在第二个项目中的表单没有偏向名称(form1 当前存在 2 次,因此让我们将其重命名为 form2),您可以导入第二个项目并直接使用它的类
Imports Project2

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

我使用Visual Studio 2012作为基础,但原理应该是一样的;)

附加

我可能会指出,这不是您引用项目的典型风格,大多数情况下,您将按关注级别将应用程序分开,例如添加:
  • 一个实体层,包含您的模型,并被所有其他层(解决方案)引用
  • 一个可以加载/保存您的模型并为它们提供服务的数据层,它被“业务逻辑层”引用并引用实体层本身
  • 一个业务逻辑层,它引用数据层和实体层,并在表示层内部引用,它不知道您正在使用哪个数据库,它只是作为您的表示层之间的中介(这是用户sees) 和数据层,并且只处理实体层中定义的实体
  • 最后,表示层,它引用实体层和业务逻辑层,它不需要知道哪个数据库正在为数据提供服务,而只是以一种有用的方式向用户展示数据

  • 当然有很多方法可以用有意义的结构来安排你的应用程序,但我发现这个是一个很好的例子,说明你如何以一种有意义的方式来组织你的应用程序

    更新

    作为更新,如果您编写代码以便可以重用,那么让您的解决方案共享代码应该不难。通过在可以通过两种解决方案共享的类库中共享逻辑和更难的代码,您只需重写表示层(如何显示数据)。并且您可以更具体地针对您想要使用的环境执行此操作。

    最后,您的 Outlook 插件解决方案和您的 windows 窗体项目可以共享请求资源、加载数据或进行其他一些复杂计算的代码,而您唯一需要“重现”的代码就是您如何在其上显示它屏幕。因此,您可以根据环境以更好的方式呈现特定于该环境的数据,但共享您在两种(或更多)环境中使用的逻辑和模型。

    这样,你的开发时间就减少了,你的代码也不容易出错,因为你没有多次使用相同的代码,例如,请看下面的截图:

    enter image description here

    如您所见,有一个共享库,由 Outlook 插件和 Windows 窗体应用程序引用。 Forms 应用程序和 Outlook 应用程序都不知道彼此,它们也不应该知道,因为它们彼此之间基本上没有任何关系。

    因此,尽管我的最新更新没有回答您的问题,但我仍然认为这是安排代码的更好方法。如果您以后想重用您制作的代码制作一个网站,您只需要制作一个额外的表示层,并再次重用 SharedLibrary 中的代码。

    关于.net - 如何在多项目、单一解决方案环境(VS2012)中调用Forms?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30082895/

    相关文章:

    c# - 在 Git 环境中管理 Telerik .NET 引用

    c# - 我在尝试获取当前位置时得到 NAN - 经度和纬度

    Vb.net - 设置控件边距值

    .net - 当 ShowinTaskBar 为 false 时,窗口消失

    c# - 为什么我应该在继承中使用 protected 变量(成员/属性)?使用它有什么好处?

    .net - 如何以编程方式关闭 TFS 工作项

    .net - 检查文本框是否有 4 个整数

    c# - 使用不同的参数重新加载表单 c#

    .net - 我应该使用 WPF 还是 Winforms 来构建我的新 Windows 桌面应用程序?

    C#减慢随机数GUI显示