2015-05-06 1 views
5

Это частично связано с этой нитью Combining two projects and get a single .sln file.Как вызвать Формы в нескольких проектах, единая среда решения (VS2012)?

Каков правильный синтаксис для вызова форм в этих проектах. Например, если Solution1 содержит Project1 и Project2, ... и ... Project1 имеет Form1.vb & Project2 имеет Form1.vb. Итак, что такое синтаксис для вызова Form1.vb в Project2 из Form1.vb в Project1 (при условии, что есть кнопка для клика и открытия формы при событии клика).

Только примечание, однако, я добавил Project1 Project2 в Solution1, а также добавил ссылку на My Project.Resources.Designer.vb.dll.

Но когда я попытался вызвать Form1.vb в Project2 из Project1, я получил синтаксическую ошибку - Project2.Form1 не определен.

Может кто-нибудь указать мне в правильном направлении?

Любая помощь с благодарностью. Заранее спасибо.


Project1 полужирный, следовательно, проект запуска.

enter image description here



Public Class Form1 проекта 1: -

enter image description here



Public Class Form1 проекта 2: -

enter image description here



Сообщение об ошибке: -

enter image description here



Не имеют возможность выбрать "Импорт пространства имен": -

enter image description here



Это как форма Project1 выглядит следующим образом: -

enter image description here



My Reference Manager => вариант решения пуст

enter image description here



Пусть говорит, если я хочу, чтобы перейти к отпечатку в Solution опции => Проекты выше, что тип файла, который я должен выбрать?
a. Файл проекта Visual Basic
b. USER File
c. VSPSCC Файл

enter image description here



Как звонить Form1 (в olAddIn_With_Form1) от Проект1 (проект запуска)?

Ответ:
Добавить .dll через окно Reference Manager, затем перейдите к ... \ Bin \ Debug \ olAddIn_With_Form1.длл

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

enter image description here



Для пинков, я пытаюсь добавить весь проект через «Добавить ссылку », и я получил это сообщение об ошибке

enter image description here

+0

Какой проект является вашим проектом запуска? – Shar1er80

+0

Project1 - при запуске открывается Form1 Project1. – pdsd

+0

Вы добавили Project2 в качестве ссылки на Project1? Я бы предположил, что в Project1 у вас будет «Dim p2Form2 As New Project2.Form1» – Shar1er80

ответ

3

Таким образом, чтобы ответить на некоторые скриншоты:

Сначала создать два проекта. Проект, который является проектом запуска (в вашем примере и в моем, который будет Project1), должен знать о другом решении. Для этого нам нужно добавить ссылку на проект, щелкните правой кнопкой мыши на Проект1 и нажмите на кнопку "Добавить ссылку ...

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 в качестве основы, но принцип должен быть таким же;)

Сложение

я мог бы указать на то, что это не будет ваш типичный стиль ссылки на проекты, в основном вы будете разделять приложения на уровни беспокойства, добавив, например:

  • entitylayer, который содержит ваши модели, и ссылается на все остальные уровни (решения)
  • Datalayer, который может загружать/сохранять ваши модели и обслуживать их, на это ссылается «уровень бизнес-логики» и ссылается на сам объект сущности
  • Уровень бизнес-логики, который ссылается на datalayer и entitylayer и ссылается на уровень представления, он ничего не знает о какой базе данных вы используете, он просто служит посредником между вашим уровнем представления (который является тем, что видит пользователь) и datalayer, и обрабатывает только сущности, определенные на вашем уровне сущности.
  • И, наконец, слой презентации, который ссылается на уровня сущности и уровня бизнес-логики, ему не нужно знать, какая база данных обслуживает данные, но только предоставляет данные в полезном виде для своих пользователей.

Существует, конечно, множество способов организовать ваше приложение в значимой структуре, но я считаю, что этот пример является хорошим примером того, как вы можете структурировать свое приложение значимым образом.

ОБНОВЛЕНИЕ

Как обновление, получение решений для совместного использования кода, не должно быть так сложно, если вы напишете свой код, чтобы его можно было повторно использовать. Разделяя логику и более сложный код внутри библиотеки классов, которые могут использоваться для обоих решений, вам нужно только переписать слой Presentation (как вы показываете данные). И вы можете сделать это более конкретно для среды, с которой вы хотите работать.

В конце концов, ваш проект Outlook Addin Solution и ваш проект форм Windows могут совместно использовать код, который запрашивает ресурсы, или загружает данные, или выполняет некоторые другие сложные вычисления, и единственный код, который вы должны «размножить», - это то, как вы показываете его на экране. Таким образом, в соответствии с окружающей средой вы можете лучше представить данные, специфичные для этой среды, но поделитесь логикой и моделями, которые вы используете в обеих (или более) средах.

Таким образом, вы время разработки вырублены, и ваш код становится менее подвержены ошибкам, потому что вы не имеете одинаковый код несколько раз, в качестве примера, см следующего скриншота:

enter image description here

Как вы можете видеть, существует общая библиотека, на которую ссылается внешний вид и приложение формы окна. Ни приложение Forms, ни приложение Outlook не знают друг о друге, и они также не должны, поскольку они практически не имеют никакого отношения к другому.

Итак, хотя мое последнее обновление не отвечает на ваш вопрос, я по-прежнему считаю, что это лучший способ организовать ваш код. Если позже вы захотите сделать сайт повторно использующим код, который вы сделали, вам нужно только сделать дополнительный слой презентации и снова использовать код из SharedLibrary.

+0

Ударьте меня на сбор скриншотов для этого ответа и адресуйте комментарий, который я опубликовал, добавив Project2 в качестве ссылки на Project1 – Shar1er80

+0

@ Shar1er80: это хорошая или плохая вещь? И я обновил ответ с некоторыми мыслями, а также :) – Icepickle

+0

Это хорошо. Вы быстрее отвечали на него, прежде чем я смог закончить свой ответ :-) – Shar1er80

0

У меня есть решение, которое имеет проект C# и проект VB.Net.

Когда я правая кнопка мыши на My Project в моем проекте VB.Net Я дал ОТКРЫТОЙ контекстному меню,

enter image description here

Когда я щелкаю открытым, я получаю следующий экран

enter image description here

Я нажимаю кнопку «Добавить» и получаю этот экран

enter image description here

Проект, представленный здесь, является моим проектом C#, который я могу добавить и в проекте VB.Net, и я могу вызвать любые публичные классы в этом проекте.

+0

Спасибо Shaler80. Это еще один способ перейти на страницу Reference Manager => Solution. Проблема в том, что на вкладке «Проекты» ничего не было. Не уверен, что я сделал неправильно здесь. ОК, скажем, если я хочу перейти к эталонному файлу, как показано на вкладке «Проект», вы знаете, где находится этот файл? Спасибо – pdsd

+0

@pdsd Вам, вероятно, нужно создать совершенно новое решение, сохранить его, добавить в него эти проекты и попробовать перечисленные предложения. – Shar1er80

0
  1. Solution Explorer,> Project> Щелкните правой кнопкой мыши> Добавить> существующий элемент
  2. Просмотр & выберите файл
  3. - вот трюк - нажмите на стрелку рядом с надписью «Добавить» и выберите «Добавить в link "

Это позволяет нескольким проектам совместно использовать файлы кода, не требуя общей библиотеки dll, ссылок или чего-либо еще. Каждое приложение может оставаться автономным EXE.

+0

Добавить, поскольку ссылка хороша, если я повторно использую часть кода, но если я повторно использую весь проект, я думаю, что было бы целесообразнее добавить в качестве проекта. – pdsd

+0

Для ударов я попытался «Добавить в качестве ссылки», выбрав все элементы под этой папкой, и у меня появилось сообщение об ошибке «Некоторые файлы, которые вы пытаетесь добавить в решение, нельзя добавить, потому что ...» (см. снимок выше). – pdsd

Смежные вопросы