2010-02-11 18 views
7

Chcę utworzyć nowy formularz, który jest prawie duplikatem okna dialogowego, które już mam w moim projekcie. Nie chcę tracić czasu na odtworzenie większości zarysowania formy, jeśli nie muszę.C# skopiować, wkleić formularz w projekcie Visual Studio

Kopiuję, a następnie wklejam do mojego projektu i zmieniam nazwę z Copy of Original .cs na NewItem.cs.

Kiedy będę mógł przebudować moje rozwiązanie, otrzymam komunikat o błędzie .

The item "obj\Debug\Control.Forms.NewUser.resources" was specified more 
than once in the "Resources" parameter. 
Duplicate items are not supported by the "Resources" parameter. 

Co robię źle? Czy istnieje sposób na rozwiązanie problemu?

+0

Rozwiązałeś to? –

+0

jeszcze nie, wciąż mam problem. – Kevin

Odpowiedz

3

Prawdopodobnie masz jakiś miejscowy zasób zapisany w pliku o nazwie Original.resx

Po skopiowaniu okno to skopiowany ten plik, ale nie zmienić jego nazwę (To nie powinno się zdarzyć, chociaż). Sprawdź, czy masz plik .resx pod swoim Copy Of Original.cs w eksploratorze rozwiązań. Jeśli tak, zmień to również.

Może warto wykonać Clean (prawy przycisk myszy na projekcie lub rozwiązaniu), aby wyczyścić foldery obj i bin, a następnie spróbować przekompilować.

+0

Kopia pliku Original.resx naprawiła jego nazwę, kiedy zmieniłem nazwę pliku Original.cs na New.cs – Kevin

+0

Mam kilka formantów, które ustawiają właściwość 'GenerateMembers' na false, dlatego utworzyłem plik resx, aby rozpocząć z. W pliku resx kontrolki mają atrybut "PublicKeyToken", który jest taki sam w obu plikach. Zastanawiam się, czy to jest problem. – Kevin

+1

Ustawienie GenerateMembers propery na false nie powinno prowadzić do utworzenia pliku .RESX. Sprawdź, czy każda z twoich klas jest poprawnie nazwana w pliku .cs i designer.cs. Widziałem to wcześniej, gdy tworzysz kopię formularza i przechodzisz do kodu, aby zmienić jego nazwę klasy, Visual Studio re-czynniki cały kod i zmienia nazwę klasy w oryginalnym pliku form.cs również (w ten sposób tworząc duplikat z nową nazwą). –

0

Po utworzeniu kopii oryginalnego formularza, VS nie zmienia oryginalnej przestrzeni nazw (w twoim przypadku jest to nadal "Oryginał"). Po prostu zmień tę zduplikowaną przestrzeń nazw (w "Kopii oryginału") w coś wyjątkowego.

2

Stare pytanie, ale odpowiem dla przyszłych pracowników Google, ponieważ OP stwierdził, że zaakceptowana odpowiedź nie rozwiązała problemu.

Problem polega na tym, że NewItem.cs nadal zawiera klasę o tej samej nazwie, co Original.cs. Dzieje się tak, gdy nazwa pliku i nazwa klasy są różne (w przeciwieństwie do Eclipse for Java, Visual Studio pozwala na to w projektach C#). Kopiowanie-wklejanie dodaje przedrostek "Kopia" do nazwy pliku i zmienia nazwę pliku pliku nie jest wystarczająco inteligentny, aby dowiedzieć się, że zmiana nazwy klasy byłaby w takim przypadku właściwa.

Aby naprawić błąd, należy zmienić nazwę klasy w powielonym projekcie. Mówię o elemencie zamiast pliku, ponieważ w przypadku rzeczy WinForma oznacza to dwa pliki: jeden, który eksplorator rozwiązań wyświetla domyślnie (prawy przycisk myszy -> pokaż kod lub F7, jeśli jesteś witany przez projektanta wizualnego) i .designer.cs. Nie ma potrzeby modyfikowania .resx AFAIK.

Powiązane problemy