Подтвердить что ты не робот

Как добавить существующую форму в новый проект?

Мне никогда не удавалось добавить новый файл Form в качестве существующего файла в новый проект. Я читал в блоге, что вы добавляете только файл *.cs, и в него входят зависимости. Ну, я попробовал это, и файл сделал dragin и связал файлы *.designer и *.resx. Но значок формы не отображается. Вместо этого файл выглядит как обычный образ файла *.cs. И, когда я дважды щелкаю по файлу, я получаю код вместо объекта формы.

Можно ли добавлять существующие формы без их повторного создания?

4b9b3361

Ответ 1

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

  • Добавьте ссылку на System.Windows.Forms.dll и System.Drawing.
  • Импортировать файл *.cs

Примечания:

а. После того, как я выполнил эти действия, файлы распознаются только правильно, а затем попытались открыть файл. Внезапно VS "просыпается" и исправляет файлы.
B. Порядок шагов не имеет значения. Если вы уже импортировали файлы *.cs, просто исправьте ссылки.
C. Если отсутствуют другие ссылки (E.G. DevExpress или другой импорт сторонних поставщиков), файлы *.cs будут отображаться неправильно до тех пор, пока это не будет разрешено.

Ответ 2

Извините P.Brian.Mackey, ваше решение не сработало для меня. Это улучшило его, заставив VS признать, что это была форма, а не файл кода, то есть дал ей значок (представьте, что он добавил форму)

Но единственный способ, которым я смог полностью исправить проблему, - это отредактировать файл csproj вручную в текстовом редакторе. Я не уверен, что это отличное решение и потенциально опасно, особенно учитывая, что я допустил две типизирующие ошибки и полностью нарушил проект, но он работал, как только я понял. Также трудно найти ошибки, например, не закрывать теги должным образом или забывать о расширении файла.

Итак, проект начался с этих записей после добавления файлов через "Добавить → Существующий элемент": (Ps Я уверен, что вам не нужно сначала копировать файлы в папки проекта, просто перейдите туда, где они хранятся вне проекта, а VS будет скопировать их в папку, на которую вы щелкнули правой кнопкой мыши. Скопировать заранее, конечно, тоже.)

<Compile Include="Reports\GBudget1Report.cs">
  <SubType>Form</SubType>
</Compile>
<Compile Include="Reports\GBudget1Report.Designer.cs" />
<Compile Include="Reports\GBudget2Report.cs">
  <SubType>Form</SubType>
</Compile>
<Compile Include="Reports\GBudget2Report.Designer.cs" />
<Compile Include="Reports\LASHForm.cs">
  <SubType>Form</SubType>
</Compile>

и далее в файле:

<EmbeddedResource Include="Reports\GBudget1Report.resx" />
<EmbeddedResource Include="Reports\GBudget2Report.resx" />

Сравнивая их с существующими формами в проекте, которые работали корректно (другой вариант - если у вас его нет), нужно создать новую форму в Visual Studio, и она даст вам правильную разметку для копирования ) Я обнаружил, что тег DependentUpon не связывает субфайлы с основным файлом кода формы.

Итак, я отредактировал его вручную, чтобы он соответствовал:

<Compile Include="Reports\GBudget1Report.cs">
  <SubType>Form</SubType>
</Compile>
<Compile Include="Reports\GBudget1Report.Designer.cs">
   <DependentUpon>GBudget1Report.cs</DependentUpon>
</Compile>
<Compile Include="Reports\GBudget2Report.cs">
  <SubType>Form</SubType>
</Compile>
<Compile Include="Reports\GBudget2Report.Designer.cs">
   <DependentUpon>GBudget2Report.cs</DependentUpon>
</Compile>

Снова вниз по файлу:

<EmbeddedResource Include="Reports\GBudget1Report.resx">
  <DependentUpon>GBudget1Report.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Reports\GBudget2Report.resx">
  <DependentUpon>GBudget2Report.cs</DependentUpon>
</EmbeddedResource>

Это не решение, которое мне нравится, но оно работает. Если у кого-то есть лучшие решения, я рад слушать.

Ответ 3

Я знаю, что это старый вопрос, но я хотел дать свой ответ, который не предполагает закрытия проекта и его повторного открытия.

  • Добавьте 3 существующих файла формы (cs, Designer.cs и resx).
  • Теперь исключите 3 файла, которые вы только что добавили из проекта.
  • Откройте окно "Добавить существующий проводник" и перейдите в каталог проекта.
  • Выберите файл cs и Add.
  • Тада. все хорошо

Ответ 4

Вы можете импортировать существующую форму в проект. Файлы, которые необходимо импортировать, зависят от версии Visual Studio, используемой для создания формы.

Я предполагаю, что у вас есть два отдельных проекта: Foo и Bar в разных решениях:

C:\
    Projects\
        Foo\
            Foo.sln
            Foo.vcproj
            Program.cs
            Foo.cs
            Foo.Designer.cs
            Foo.Designer.resx

и

C:\
    Projects\
        Bar\
            Bar.sln
            Bar.vcproj
            Program.cs
            Bar.cs
            Bar.Designer.cs
            Bar.Designer.resx

Теперь скажите, что вам нужно импортировать Foo в Foo в панель проекта. Во-первых, вам нужно скопировать все файлы, которые сопровождают Foo в папку проекта Bar:

C:\
    Projects\
        Bar\
            Bar.sln
            Bar.vcproj
            Program.cs
            Bar.cs
            Bar.Designer.cs
            Bar.Designer.resx
            Foo.cs
            Foo.Designer.cs
            Foo.Designer.resx

Затем откройте Bar.sln в Visual Studio и щелкните правой кнопкой мыши проект "Бар" в обозревателе решений. Выберите [Добавить существующий элемент] и выберите все файлы, которые вы скопировали для формы Foo, в открывшемся диалоговом окне. После подтверждения вы должны увидеть вновь импортированную форму правильно в обозревателе решений.

Ответ 5

Я просто столкнулся с подобными проблемами при обновлении форм VisualBasic, начиная с VisualStudio 2010 и заканчивая VisualStudio 2013. Существует два способа добавления существующих элементов.

Проблема. Если я выберу Главное окно- > Проект- > Добавить существующий элемент и вытащил только файл formname.vb, результат будет интерпретироваться как только код (без дизайнера), указывает на исходный файл (а не на взяв копию в новый проект) и имеет другие проблемы.

Решение. Если вместо этого я перейду в окно Solution Explorer, выберите проект (в отличие от объектов нижнего уровня в дереве), а затем щелкните правой кнопкой мыши в окне, в результате появится меню Add- > Existing Item, Использование этой версии работает так, как ожидалось, требуя, чтобы я нашел файл formname.vb. Нет ручного копирования файлов, не указывая на файлы с несколькими файлами, без скриптов редактирования и т.д. Я бы предположил, что то же самое относится к формам, написанным на C.

Ответ 6

На самом деле вам нужно 2 файла: - Form1.cs - Form1.Designer.cs

Скопировать - вставьте их в свой новый проект (просто убедитесь, что в новом проекте нет такой формы с тем же именем)

Ответ 7

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

using "your existing project name";

Ответ 8

Если вы хотите создать библиотеку форм Windows, лучше создать проект приложения Windows Forms. Затем удалите форму по умолчанию (Form1), перейдите к свойствам проекта и измените тип вывода (или тип проекта) из приложения Windows Forms в библиотеку классов.

Таким образом, выход будет DLL, но он будет иметь ссылки, необходимые для проекта форм Windows. Как вы указали, при добавлении существующих элементов НЕ добавляйте их соответствующие файлы .Designer и .resx, просто добавьте их главный/основной файл.

Ответ 9

Возможно, это из-за использования visual studio 2012, но все эти решения не сработали. AtConway дал подсказку для редактирования файла csproj. И этот намек работал.

  • Откройте решение с проектом, который вы хотите добавить в свои три файла.
  • Предположим, вы хотите добавить MyForm.cs/MyForm.Designer.cs и MyForm.resX. Убедитесь, что они находятся в папке вашего проекта.
  • Добавьте фиктивную форму (или usercontrol) с фиктивным именем: MyTempForm.
  • Сохраните решение и закройте его в Studio разработчика
  • В проводнике Windows удалите три файла MyTempForm
  • Переименуйте три файла MyForm в MyTempForm с теми же расширениями.
  • Откройте решение снова в Developer Studio 2012
  • Посмотрите, что MyForm теперь полностью доступен как MyTempForm
  • В проводнике решений переименуйте MyTempForm обратно в MyForm

Ответ 10

Предположим, что вы хотите импортировать форму с именем YourFormName. Затем вы должны добавить только проект YourFormName.cs в проект - остальные части (YourFormName.designer.cs и YourFormName.resx) будут добавлены автоматически.

действия:

Создайте проект WinForms (в моем случае .Net Framework - 4.5.1) в VS2013 Щелкните правой кнопкой мыши по проектам → Добавить → Существующий элемент... copy winform, которую вы хотите импортировать в папку вашего проекта. Если вы хотите добавить его в новую папку, сначала создайте папку и добавьте ее. Найти любой WinForm с элементами управления (я добавил две формы, созданные в VS2010 для .NET framework 4) менее чем за 10 секунд визуальная студия добавила все остальные файлы, и я могу открыть ее в режиме разработки.

Ответ 11

После нескольких методов самый простой способ для использования существующего WinForm был найден следующим образом: (похоже на ответ HaraldDuchs) и протестирован только на VS2013:

1) Перед перемещением существующей WinForm в исходную папку целевых проектов создайте фиктивный WinForm, используя то же имя вашего исходного WinForm.

2) Закройте решение VS при сохранении.

3) Удалите/замените вновь созданный фиктивный набор файлов WinForm (*.cs, *.Designer.cs и *.resx) из Проводника Windows (вне VS IDE) с существующими файлами WinForm, которые вы хотите использовать.

4) Откройте VS, чтобы найти существующий WinForm, и вы можете переименовать его из VS IDE, если хотите, и вам нужно будет изменить пространство имен старой WinForm в соответствии с вашим новым проектом.

Ответ 12

В моем случае я также отметил, что я могу только объявлять одну форму за раз. Вы можете увидеть формы как отдельные элементы, если вы попытаетесь добавить несколько форм одновременно.

Ответ 13

Все, что необходимо в visual Studio 2012, следующее:

  • Скопируйте три файла для формы в папку проекта (.cs,.designer.cs и .resx)
  • Перейдите к проекту и добавьте существующий объект.
  • Выберите файл .CS
  • Он будет импортироваться и выглядеть как стандартный файл кода. Двойной щелчок на нем не откроет конструктор, как указано выше. Однако просто нажмите на сохранение всех файлов, а затем закройте и повторно откройте проект, теперь он распознается как форма и работает правильно.

Ответ 14

Вы все равно можете использовать "Добавить существующий iTem"

  • "Добавить существующий iTem", выберите три файла (.cs.resx.Designer.cs)

  • убедитесь, что "приложение пространства имен" в вашем .cs файле совпадает с проектом

  • теперь вы можете использовать автозаполнение формы, которую вы только что добавили.

Ответ 15

Это работало для меня только сейчас (у меня такая же проблема, как и вы). 1. Создал новую winform с тем же именем, добавил что-то к ней (так что файл resx создан), сохранен и закрыт. 2. Замените вновь созданные файлы исходной формой. 3. Сделано

Ответ 16

Перетащите файлы .cs из файловой системы в дерево проектов в обозревателе решений (например):

  • mainForm.cs
  • mainForm.Designer.cs

Не забывайте о ссылках, если это не проект Windows Forms.

Ответ 17

Хотя это старый пост, у меня была такая же проблема, как описанная выше @MatthewRadford. Моим обходным путем для этого было только добавить файл .CS(не добавлять файл .resx) и позволить visual studio автоматически генерировать файл .resx сразу после добавления файла .cs.

Однако я нашел постоянное решение. Если вы начали испытывать эту проблему сразу после обновления до новой версии визуальной студии, возможно, что во время обновления Active Reports не были зарегистрированы должным образом. Решение заключается в деактивации активных отчетов (с помощью диспетчера лицензий GrapeCity), удалении активных отчетов, переустановке активных отчетов с нуля и повторной активации вашей лицензии. Теперь вы сможете добавлять ReportName.cs и ReportName.resx, а также файл Designer.cs, одновременно с визуальной студией, правильно обрабатывающей их зависимости.

Ответ 18

Просто добавьте файл формы (form.vb или form.cs), другие файлы будут созданы автоматически.

Ответ 19

После многого тестирования и неспособности правильно распознать форму при добавлении, несмотря на то, что .designer и .resx копировали, когда был импортирован .vb, я нашел решение Vidar лучшее, наименее хакерское исправление.

Похоже, что если эти ссылки еще не включены в проект (если форма еще не заполнена), форма не распознается как форма и вместо этого импортируется как модуль кода.

  • System.Drawing
  • System.Windows.Forms

Они могут быть добавлены вручную по их решению выше, или вы можете просто

  • Добавить новую пустую форму в проект (это автоматически добавляет ссылки выше)
  • Добавить существующую форму .vb/.cs, которую вы хотите импортировать (теперь она отобразит значок формы в обозревателе решений, а "View Designer" будет доступен из контекста).
  • Удалить пустую форму или использовать ее для чего-то еще.

Это не требует редактирования каких-либо конфигурационных файлов VS, как показано в других ответах на вопрос.

Ответ 20

Все, что вам нужно - передать файл .cs. (Файл кода)