2009-10-06 13 views
16

mam problem (oczywiście pytanie :)Nazwa typu {myUserControl} nie istnieje w rodzaju {myNamespace.myNamespace}

Mam project-- myproject ... stąd reszta projektu używa domyślnej dowolnej klasy jako przestrzeni nazw "MyProject" ... nie ma problemu.

W moim projekcie utworzyłem niestandardową kontrolę użytkownika, która ma wiele innych elementów sterujących (etykieta, pola tekstowe itp.). Zatem ta klasa jest TAKŻE w domyślnym obszarze nazw "MyProject". Wszystkie kompilacje nie stanowią problemu. Tylko w celu potwierdzenia widoczności zasięgu, na tej kontroli użytkownika, upewniłem się, że kod DESIGNER i Code-Behind (Mój kod) są OBU w obrębie tej samej przestrzeni nazw "MyProject" (są), ORAZ są to odpowiednio PUBLICZNA CZĘŚCIOWA KLASA MyUserControl .

Teraz problem. Tworzę prosty formularz (również domyślnie w przestrzeni nazw "MyProject"). Z przybornika istnieje "MyUserControl", więc przeciągam go na MyNewForm. Przeciąganie/upuszczanie jest w porządku.

Zapisz wszystko, skompiluj, zawieść ... Projektant dodaje dodatkowe odwołanie do "MyProject", dzięki czemu wygląda na to, że kontrola użytkownika znajduje się w MyProject.MyProject.MyUserControl .. zamiast MyProject.MyUserControl.

Jak tylko ręcznie usunę dodatkowy "MyProject.", Zapisz i skompiluj, wszystko jest w porządku. Jeśli jednak ponownie edytuję formularz, zmieniam coś, M $ zmieni go z powrotem w oryginalne odniesienie "MyProject.MyUserControl".

Wszystko powiedział, że tu są to fragmenty z mojego projektu ...

namespace MyProject 
{ 
    partial class MyNewForm 
    { 
     ... 
     private void InitializeComponent() 
     { 
     // THIS is the line that has the extra "MyProject." reference 
     // when I manually remove it, all works perfectly 
     this.MyUserControl1 = new MyProject.MyUserControl(); 
     } 
    } 


    private MyUserControl MyUserControl1; 

} 

Następnie w definicji MyUserControl mam ...

namespace MyProject 
{ 
    public partial class MyUserControl : UserControl 
    ... 
} 

i od MyUserControl przez Designer ...

namespace MyProject 
{ 
    public partial class MyUserControl : UserControl 
    ... 

} 

Dzięki za pomoc ...

Odpowiedz

11

Co projektant robi jest w porządku.

-> Masz gdzieś w projekcie przestrzeń nazw o nazwie MyProject.MyProject.

(Spróbuj ze znalezieniem go w „Class View”)

+2

ŁADOWANIA podziękowań. – Larry

+15

Dzieje się tak również wtedy, gdy masz klasę w przestrzeni nazw o tej samej nazwie co jej przestrzeń nazw. – greenskin

0

Ponieważ był to top wynik wyszukiwania, gdy miałem ten błąd, po prostu chcę pisać moją przyczynę i rozwiązanie.

  • Miałem dwa projekty w ramach rozwiązania, dzieląc "wspólny" plik klasy, który został dodany jako link.
  • Dodałem drugi plik klasy "pomocnika" jako link, użyłem jego kodu w pierwszym i dostałem błąd.

Problem polegał na tym, że nie dodałem drugiej klasy "pomocnika" jako odnośnika w obu projektach.

Tak więc drugi projekt miał zaktualizowaną "wspólną" klasę, ale nie znał klasy "pomocnika", z której teraz korzystał.

Uwaga do siebie: zwrócić większą uwagę na kolumnę projektu listy błędów :)

11

PS. każdemu, kto ma ten sam problem, ale nie znalazł żadnego rozwiązania ...

Zakładając, że utworzyłeś nowe WindowsFormApplication;

  1. Utwórz nowy projekt WindowsFormApplication, używając tej samej nazwy co nazwa rozwiązania.
  2. Domyślnie utworzona nazwa formularza nosi nazwę "Form1". I zmień jego nazwę tak samo jak nazwę projektu.
  3. Dodaj nową klasę UserControl do projektu.
  4. Utwórz/przebuduj projekt i sprawdź, czy sterowanie użytkownika znajduje się w Przyborniku.
  5. Przeciągnij formant użytkownika do formularza i rozpocznij debugowanie.
  • Error: The type name 'userControlName' does not exist in the type 'projectName.FormName'

miałem badania nad siatką dla każdego rozwiązania, ale nie mógł wymyślić jakiejkolwiek odpowiedzi ...

Ale jeśli zmienić nazwę formularza dowolny inny różny od nazwy projektu, to Będę rozwiązany.

Jeśli nalegasz, aby nazwa formularza i nazwa projektu były takie same, w zależności od potrzeb projektu, można utworzyć niestandardową bibliotekę DLL i użyć w niej kontrolki użytkownika.

Następnie użyć jako kontrola, dodać plik DLL „Toolbox” używając „wybierz produkt ...”

Wreszcie będzie gotowy do użycia.

PS2. walcząc z tym samym problemem przez wiele godzin, to jest rozwiązanie, które znalazłem.

+1

Znalazłem podobny problem. Dla mnie była to klasa o tej samej nazwie przestrzeni nazw.Doprowadziło mnie to do szału, ale dzięki tej odpowiedzi znalazłem to. –

1

Nazwa kontroli użytkownika i formularz są takie same. Używanie różnych nazw rozwiąże problem.

2

Nazwa przestrzeni nazw i nazwa klasy muszą być różne. Kod wygenerowany przez dodanie WCF automatycznie odwołuje się do Przestrzeni nazw, ale jeśli nazwa klasy jest taka sama jak nazwa obszaru nazw, wygenerowany kod sprawdza klasę i nic się nie skompiluje.

0

Wystarczy napotkał to gdzie miałem MasterPage, który miał wyraźny

<%@ Import Namespace="MyNamespace" %> 

w pliku .master

0

Dzieje się tak również podczas korzystania z różnych stron, ale o tej samej nazwie. W moim przypadku utworzyłem stronę "Grants.xsd" i stronę "Grants.aspx". W jakiś sposób znaleźli się w konflikcie, powodując ten błąd.

Możesz łatwo rozwiązać ten problem, umieszczając kursor nad słowem kluczowym winowajca (nazwa klasy), aw Visual Studio 2013 - dokładnie określa, gdzie znajduje się konflikt.

Powiązane problemy