这与此帖子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& amp; Project2到Solution1,并添加了对My Project.Resources.Designer.vb.dll的引用。
但是当我尝试从Project1调用Project2中的Form1.vb时,出现语法错误 - 未定义Project2.Form1。
有人能指出我正确的方向吗?
非常感谢任何帮助。提前致谢。
Project1是粗体,因此是启动项目。
项目1的公共类Form1: -
项目2的公共类Form1: -
错误讯息: -
没有选择"导入命名空间": -
这就是Project1的形式: -
我的参考经理=>解决方案选项为空
假设我想在Solution =>中浏览参考文件上面的项目选项,我应该选择哪种文件类型?
一个。 Visual Basic项目文件
b。用户文件
c。 VSPSCC文件
如何从Project1(启动项目)调用Form1(在olAddIn_With_Form1中)?
回答:
通过Reference Manager窗口添加.dll然后浏览到... \ bin \ Debug \ olAddIn_With_Form1.dll
Dim myolAddIn_With_Form1Form1作为新的olAddIn_With_Form1.Form1
myolAddIn_With_Form1Form1.ShowDialog()
对于踢,我尝试通过"添加链接"添加整个项目。方法,我收到此错误消息
答案 0 :(得分:3)
所以,回答一些截图:
首先创建两个项目。作为启动项目的项目(在您的示例中,在我的示例中,将是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
或者,如果第二个项目中的表单没有偏向名称(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作为基础,但原则应该相同;)
<强> ADDITION 强>
我可能会指出,这不是您引用项目的典型风格,大多数情况下您会按照关注程度将您的应用程序分开,例如添加:
当然,有很多方法可以将您的应用程序安排在一个有意义的结构中,但我发现这个方法是一个很好的例子,说明如何以有意义的方式构建应用程序
<强>更新强>
作为更新,如果您编写代码以便可以重复使用,那么让您的解决方案共享代码不应该这么难。通过在可以通过两种解决方案共享的类库中共享逻辑和更难的代码,您只需要重写表示层(如何显示数据)。您可以针对您想要使用的环境更具体地进行此操作。
最后,您的Outlook Addin解决方案和您的Windows窗体项目可以共享请求资源的代码,或加载数据,或进行一些其他复杂的计算,而您必须“重现”的唯一代码就是您如何在屏幕上显示它。因此,根据环境,您可以以更好的方式呈现数据,特定于该环境,但共享您在两个(或更多)环境中使用的逻辑和模型。
这样,您的开发时间减少了,并且您的代码变得不那么容易出错,因为您没有多次使用相同的代码,例如,请参阅以下屏幕截图:
如您所见,有一个共享库,由outlook addin和windows表单应用程序引用。 Forms应用程序和outlook应用程序都不知道彼此,它们也不应该,因为它们基本上与另一个没有任何关系。
所以,虽然我的最新更新没有回答你的问题,但我仍然认为这是安排你的代码的更好方法。如果您以后想要重新使用您创建的代码的网站,您只需要创建一个额外的表示层,并再次重用SharedLibrary中的代码。
答案 1 :(得分:0)
我有一个包含C#项目和VB.Net项目的解决方案。
当我在我的VB.Net项目中右键单击My Project
时,我获得了一个打开的上下文菜单
当我点击打开时,我会看到以下屏幕
我点击添加按钮并进入此屏幕
这里列出的项目是我可以添加的C#项目,在我的VB.Net项目中,我可以调用该项目中的任何公共类。
答案 2 :(得分:0)
这允许多个项目共享代码文件,而不需要共享的dll,引用或任何东西。每个应用程序都可以作为独立的EXE保留。
答案 3 :(得分:0)
由于我也遇到了这个问题,因此我想添加另一种方法。唯一的区别是我无法添加对第二个项目的引用,因为它已经具有现有的引用。尝试这样做将导致以下错误:
无法添加对“ XXXX”的引用。将此项目添加为 引用将导致循环依赖。
所以这是一个可行的方法(对我来说):
在我的通话课上:
'Path of the .exe which contains the form that should be opened
Dim allAssemblies As System.Reflection.Assembly = System.Reflection.Assembly.LoadFile(Application.ExecutablePath)
'loads content of the assembly file
Dim runTimeTypes As Type() = allAssemblies.GetTypes
'iterate the content
For Each runTimeType As Type In runTimeTypes
'if matching record is found
If runTimeType.Name = "F_myForm" Then
'open it with the desired parameters; of course a matching constructor has to exist in "F_myForm"
Dim parameters As Object() = {"x", "y", "z"}
Dim form As Form = CType(Activator.CreateInstance(runTimeType, parameters), Form)
form.Show()
End If
Next
答案 4 :(得分:0)
我试试这个,它对我有用。
如果错误显示(“无法添加对项目的引用...”)。 然后返回您的项目引用并删除该引用并再次重复上述步骤