如何在多个项目,单一解决方案环境(VS2012)中调用Forms?

pds*_*dsd 6 .net vb.net winforms

这与此线程部分相关.组合两个项目并获取单个.sln文件.

在这些项目上调用表单的正确语法是什么.例如,如果Solution1包含Project1和Project2,则...和... Project1具有Form1.vb&Project2具有Form1.vb.那么在Project1中从Form1.vb调用Project2中的Form1.vb的语法是什么(假设有一个按钮可以单击并在click事件上打开一个表单).

但是请注意,我已将Project1和Project2添加到Solution1,并添加了对My Project.Resources.Designer.vb.dll的引用.

但是当我试图从Project1调用Project2中的Form1.vb时,我得到了语法错误 - 没有定义Project2.Form1.

有人能指出我正确的方向吗?

任何帮助是极大的赞赏.提前致谢.


Project1是大胆的启动项目.

在此输入图像描述



项目1的公共类别表格1: -

在此输入图像描述



项目2的公共类别表格1: -

在此输入图像描述



错误信息: -

在此输入图像描述



没有选择"导入命名空间"的选项: -

在此输入图像描述



这就是Project1的形式:

在此输入图像描述



我的参考管理器=>解决方案选项为空

在此输入图像描述



假设,如果我想在上面的Solution => Projects选项中浏览参考文件,我应该选择哪种文件类型?
一个.Visual Basic项目文件
b.用户文件
c.VSPSCC文件

在此输入图像描述



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

答案:
通过Reference Manager窗口添加.dll然后浏览到...\bin\Debug\olAddIn_With_Form1.dll

Dim myolAddIn_With_Form1Form1 As new olAddIn_With_Form1.Form1 myolAddIn_With_Form1Form1.ShowDialog()

在此输入图像描述



对于踢,我尝试通过"添加为链接"方法添加整个项目,我收到此错误消息

在此输入图像描述

Ice*_*kle 5

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

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

添加对启动项目的引用

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

选择第二个项目

然后您可以使用 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
Run Code Online (Sandbox Code Playgroud)

或者,如果您在第二个项目中的表单没有偏向名称(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
Run Code Online (Sandbox Code Playgroud)

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

添加

我可能会指出,这不是您引用项目的典型风格,大多数情况下,您将按关注级别将应用程序分开,例如添加:

  • 一个实体层,包含您的模型,并被所有其他层(解决方案)引用
  • 一个可以加载/保存您的模型并为其提供服务的数据层,这是由“业务逻辑层”引用并引用实体层本身
  • 一个业务逻辑层,它引用数据层和实体层,并在表示层内部引用,它不知道您正在使用哪个数据库,它只是作为您的表示层之间的中介(这是用户sees) 和数据层,并且只处理实体层中定义的实体
  • 最后是表示层,它引用了实体层和业务逻辑层,它不需要知道哪个数据库正在为数据提供服务,而只需要以一种有用的方式将数据呈现给它的用户

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

更新

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

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

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

在此处输入图片说明

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

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