Udostępnij za pośrednictwem


Rozwiązywanie problemów z rozwoju w czasie projektowania

Podczas tworzenia niestandardowych doświadczenia podczas projektowania składników Windows Forms i formantów, może wystąpić następujące problemy wspólne:

  • Nie można do kompilacji

  • Nie można do debugowania w czasie projektowania

  • Błąd kompilatora: "typ lub obszar nazw nazwa 'Nazwa typu" nie można odnaleźć."

  • Błąd w czasie projektowania: "nie powiodło się utworzyć składnika"Nazwa składnika"."

  • Debugowanie błędu: "Niedozwolona operacja między wątkami: formant 'Nazwa formantu' dostęp z wątku innego niż wątek został utworzony na."

  • Błąd w czasie projektowania: "nie można otworzyć projektanta dla pliku, ponieważ klasa w nim nie dziedziczy z klasy, którą można zaprojektować wizualnie."

  • Glify pozostają po usunięciu składnika

  • Domyślne zachowanie projektanta, zasłonięte przez zachowanie niestandardowych

  • Projektant zdarzenia wywoływane w sposób niezamierzony

  • Kolekcje nie można serializować

  • Projektant nie powiedzie się do nabywania UndoEngine odniesienia

  • Środowisko projektowania nie rozpoznaje zmian właściwości składnika

  • DesignerAttributeSkładnia

  • Odświeżanie środowisko projektowania po wprowadzeniu zmian w części lub projektanta

  • Ostrzeżenie FxCop na formularzu wygenerowanym systemu Windows: DoNotInitializeUnnecessarily

  • Częściowe klas i Projektant Windows Forms

  • Kontrolki niestandardowe i starszego typu spowodować nieoczekiwane zachowanie w Projektancie

  • Tag inteligentny w projektancie obsługiwanych wzbudza wyjątek

  • Ikona składnika nie jest wyświetlana w przyborniku

Nie można do kompilacji

Znaczną część rozwoju w czasie projektowania należy dodać odwołanie do zestawu czasu projektowania, System.Design.dll.Ten moduł nie jest dołączony do.NET Framework 4 profilu klienta.Aby dodać odwołanie do System.Design.dll, należy zmienić projektu docelowego ramy do .NET Framework 4.

Nie można do debugowania w czasie projektowania

Do debugowania kodu w czasie projektowania na dwa sposoby:

  • Miejsce MessageBox.Show zawinięć do punktów strategicznych w kodzie.

  • Dołącz inne wystąpienie programu Visual Studio do debugowania środowiska projektowania w pierwszej instancji.

Aby uzyskać więcej informacji, zobacz Jak: usług dostępu w czasie projektowania.

Błąd kompilatora: "typ lub obszar nazw nazwa 'Nazwa typu" nie można odnaleźć"

Należy odwołać zestawu opcję System.Design.Typy związane z projektantem znajdują się w montażu opcję System.Design.Obejmuje to typy w System.Windows.Forms.Design i System.ComponentModel.Design obszarów nazw.

Pamiętaj również zaimportować obszarów nazw, należy za pomocą Imports lub using słowa kluczowe.Aby uzyskać więcej informacji, zobacz Jak: obsługa dostępu w czasie projektowania w Windows Forms.

Błąd w czasie projektowania: "nie powiodło się utworzyć składnika 'Nazwa składnika'"

Ten błąd można otrzymywać podczas tworzenia składnika lub formantu na powierzchni projektu z Przybornik.W poniższej tabeli przedstawiono dwie prawdopodobne przyczyny tego błędu.

Przyczyna

Opis

Notatki

Brak domyślnego konstruktora.

Składnik lub kontroli musi mieć domyślnego konstruktora, który jest konstruktora bez parametrów.

Środowisko projektowania wymaga konstruktora domyślnego, aby móc utworzyć wystąpienie tego typu.

Składnik jest typ rodzajowy

Składnik lub formant nie może być generic typu, który jest również nazywany szablonu typu lub sparametryzowana typu.Typy rodzajowe nie obsługuje środowisko projektowania.

Jeśli Twój typ rodzajowy pochodzi od UserControl i spróbować uruchomić go w programie Visual Studio UserControl kontener testu, otrzymasz następujący błąd:

Nie można utworzyć UserControl ' Nazwa"

Komunikat o błędzie był "Nie można utworzyć typu, dla którego wartością Type.ContainsGenericParameters jest true".

UserControl zostaną usunięte z listy.

Chociaż składniki i formanty nie może być typy rodzajowe, używają typy rodzajowe.

Błąd w czasie projektowania: "wartość nie może być null.Nazwa parametru: 'Nazwa składnika' "

Ten błąd można otrzymywać podczas tworzenia składnika lub formantu na powierzchni projektu z Przybornik.Najbardziej prawdopodobną przyczyną jest próby składnika lub formantu, który został zbudowany do zestawu 64-bitowych.Środowisko projektowania programu Visual Studio nie obsługuje 64-bitowych składników.

Debugowanie błędu: "Niedozwolona operacja między wątkami: formant 'Nazwa formantu' dostęp z wątku innego niż wątek został utworzony na."

Jeśli używasz wielowątkowość w aplikacjach Windows Forms należy uważać wywołań formanty w sposób bezpieczny wątku.Ten wyjątek jest wywoływane przez debugera i nie pojawia się w czasie wykonywania, ale zdecydowanie zaleca się aby rozwiązać ten problem, po wyświetleniu go.Aby uzyskać więcej informacji, zobacz Jak: wywołań wielowątkowość formanty Windows Forms.

Błąd w czasie projektowania: "nie można otworzyć projektanta dla pliku, ponieważ klasa w nim nie dziedziczy z klasy, którą można zaprojektować wizualnie"

Plik składnika lub formant może zawierać wiele definicji klasy, ale pierwsza klasa w pliku musi być taki, który można zaprojektować.Pierwsza klasa w pliku musi implementować IComponent interfejsu, lub musi pochodzić od Component klasy lub klasy pochodnej Component.

Glify pozostają po usunięciu składnika

Jeśli twój niestandardowy Projektant tworzy żadnego Adorner obiektów, należy usunąć je z powierzchni projektu podczas programu designer wykracza poza zakres.Wywołanie BehaviorServiceAdornerCollection.Remove w sieci Projektant Dispose metodę, aby wyczyścić Glyph obiekty i związanych z Adorner i Behavior obiektów.Aby uzyskać więcej informacji, zobacz Jak: Rozszerz wygląd i zachowanie formantów w trybie projektowania.

Domyślne zachowanie projektanta, zasłonięte przez zachowanie niestandardowych

Projektant kontroli domyślny tworzy glif, który obejmuje cały formant na powierzchni projektu.To jest o nazwie organ glif.Jeśli Twój Projektant formant niestandardowy tworzy glif z tym samym granice jako glifów organu, zasłonięcia podstawowej Behavior wykonania skojarzonych z glifów ciała.To zapobiega domyślne funkcje, takie jak tagi inteligentne i zmiana rozmiaru glify pojawianiu się.

Nie można przekazać wiadomości między Behavior obiektów, więc nie można obsłużyć wiadomości myszy i przekazuje wszelkie leżących u podstaw Behavior obiektów.Po zaimplementowaniu glifów, który obejmuje cały formant ponosisz odpowiedzialność za całą wygląd i zachowanie możliwości projektowania niestandardowych.

Projektant zdarzenia wywoływane w sposób niezamierzony

Jeśli twój niestandardowy Projektant przywiązuje obsługi zdarzeń do projektanta zdarzeń takich jak ComponentRemovedActiveDesignerChanged, i SelectionChanged, należy odłączyć programu obsługi zdarzeń w sieci Projektant Dispose metody.

Nie może spowodować niezamierzone zachowanie w czasie projektowania.Poniższa lista przedstawia niektóre symptomy, które mogą występować:

  • Okno komunikatu o błędzie: "Wystąpił błąd podczas przetwarzania tego polecenia."

  • Okno komunikatu o błędzie: "Object nie ustawieniu odwołania do wystąpienia obiektu".

  • Programy obsługi zdarzeń o nazwie niewłaściwie składniki zostaną usunięte lub projektantów są zamknięte.

Kolekcje nie można serializować

Jeśli składnik niestandardowy lub formantu właściwości kolekcji, aby możliwa była serializacja, stosuje się DesignerSerializationVisibilityAttribute i ustawić ją na Content.Aby uzyskać więcej informacji, zobacz Jak: serializować kolekcji standardowe typy z DesignerSerializationVisibilityAttribute.

Projektant nie powiedzie się do nabywania odwołanie UndoEngine

Jeśli próba nabyć odniesienie do UndoEngine usługi podczas ładowania formularza GetService metoda zwraca null.

UndoEngine Usługa nie jest tworzony i włączone, dopóki formularz zakończy się jego fazą ładowania.Po formularz jest załadowany, kolejne wywołania GetService zwróci UndoEngine odniesienia.

Ogólnie rzecz biorąc, rzadko należy wymagać odniesienia do UndoEngine bezpośrednio.Te przypadki, w których potrzebna są zwykle spowodowane przez akcję użytkownika i występować po załadowaniu przez projektanta.

Środowisko projektowania nie rozpoznaje zmian właściwości składnika

Środowisko projektowania nie rozpoznaje zmian do składnika lub formantu, jeśli bezpośrednio ustawić właściwości.Dla zdarzeń, takich jak ComponentChanged należy podnieść, musi ustawić wartość właściwości składnika sieci, z PropertyDescriptor.SetValue metody.Powiadamia to środowisko projektowania, zmiany właściwości, umożliwiających powierzchni projektu i PropertyGrid formantów, aby zaktualizować poprawnie.Aby uzyskać więcej informacji, zobacz Jak: Rozszerz wygląd i zachowanie formantów w trybie projektowania.

Składnia DesignerAttribute

Dołączyć swoje niestandardowe designer do kontroli projektuje się to stosując DesignerAttribute do formantu.

Należy dokładnie określić DesignerAttribute parametry, w przeciwnym razie środowisko projektowania nie załadować programu designer niestandardowe.

Odświeżanie środowisko projektowania po wprowadzeniu zmian w części lub projektanta

Po wprowadzeniu zmian do aspektów projektowania składnika należy odbudować projektu składnika.Ponadto w przypadku innego projektu Windows Forms, który jest aktualnie otwarty i używa tego składnika, prawdopodobnie trzeba będzie odświeżać projektu, aby zobaczyć zmiany.Zazwyczaj musisz zamknąć i ponownie otworzyć okno projekt zawierający składnik.

Ostrzeżenie FxCop na formularzu wygenerowanym systemu Windows: DoNotInitializeUnnecessarily

Windows Forms Designer generuje następujący kod dla projektów Windows Forms aplikacji w języku C#.

private System.ComponentModel.IContainer components = null;

Zależności od tego, który FxCop zasady obowiązują, FxCop mogą dawać ostrzeżenie "DoNotInitializeUnnecessarily".Wynika to z null jest domyślnie środowiska wykonawczego języka wspólnego (CLR) dla właściwości odwołania.

Jeśli projektant nie został zainicjowany, components pola do null, kompilator C# wywołałoby następujące ostrzeżenie:

"Form1.components nie zostanie nigdy przypisana i zawsze będzie domyolna wartooć null."

Można pominąć ostrzeżenie FxCop z SuppressMessageAttribute, ale może to spowodować problemy konserwacji, zmianie nazwy klasy.Dlatego zalecane jest, że można zignorować ostrzeżenie FxCop.

Częściowe klas i Projektant Windows Forms

Domyślnie Projektant Windows Forms emituje kodu serializacji projektanta do dedykowanego pliku, który jest niezależny od pliku głównego składnika sieci.Na przykład, w programie project Windows Forms aplikacji, definicja na Form1 klasy jest podzielony na dwa pliki, jak pokazano w poniższej tabeli.

Plik (C# nazw plików)

Funkcja

Form1.cs

Główna klasa pliku

Form1.Designer.cs

Emitowane przez projektanta kodu

W pliku (nazwy pliku VB)

Funkcja

Form1.vb

Główna klasa pliku

Form1.Designer.vb

Emitowane przez projektanta kodu

Ogólnie rzecz biorąc nie trzeba modyfikować kodu, emitowane przez projektanta Windows Forms.Zamiast edytować plik główne klasy.

Używa projektant Windows Forms partial słowo kluczowe, aby podzielić wykonania Form1 do dwóch oddzielnych plików.Zapobiega to kod emitowane przez projektanta przeplata się z kodu.Aby uzyskać więcej informacji o partial słowa kluczowego, zobacz Częściowe klasy i metody (Podręcznik programowania C#) i Częściowe (Visual Basic).

Projektant Windows Forms nie obsługuje podzielenie definicji typu designable na więcej niż dwa partial implementacji.Ograniczenie to obejmuje tworzenie nowy plik klasy, który zawiera trzeci częściowe definicji typu, jak również dodanie trzeciego definicji częściowej klasy tego typu w głównym pliku lub plik projektanta.Elementy członkowskie zdefiniowane w ten sposób nie będą widoczne w projektancie Windows Forms.

Kontrolki niestandardowe i starszego typu spowodować nieoczekiwane zachowanie w Projektancie

Gdy typy są unieważniane w projektancie, ComponentSerializationService wykonuje reload częściowe odświeżyć designer z typami zaktualizowane.Wersje Visual Studio poprzedniego Visual Studio 2005 całkowicie ponownie załadować projektanta.Częściowe ponowne ładowanie zachowanie w Visual Studio 2005 jest szybsza niż kompletne Załaduj ponownie, a także zachowuje Cofnij.

Składniki i odpowiadające im serializers utworzone przed Visual Studio 2005 nie może być mógł pomieścić częściowe Załaduj ponownie.Składniki i kontroli może spowodować nieoczekiwane zachowanie, ponieważ zostały one utworzone do deserializacji tylko podczas pełnego Załaduj ponownie.Objawy obejmują przepełnienia stosu, zawiesza się lub puste regionów w projektancie Windows Forms gdy formanty ze starszych wersji są obecne.

Można przywrócić zachowanie pełnej reload przez dodanie następującego ustawienia w pliku devenv.exe.config.Jeśli zainstalowano Visual Studio 2005 w domyślnej lokalizacji, ten plik znajduje się w folderze C:\Program Files\Microsoft Visual Studio 8\Common7\IDE.

<appSettings>
   <add key="EnableOptimizedDesignerReloading" value="false" />
</appSettings>

Tag inteligentny w projektancie obsługiwanych wzbudza wyjątek

Jeśli zainstalujesz Projektant poza Visual Studio, tagi inteligentne mogą podnieść NullReferenceException.Aby rozwiązać ten problem, należy podać IUIService odniesienia w projektancie i wdrożenie Styles właściwości.W IDictionary przez Styles, przypisz nową Font jako element określony przez klucz "DialogFont", jak pokazano w następujący fragment kodu.

Styles["DialogFont"] = new Font(...);

Ikona składnika nie jest wyświetlana w przyborniku

W Visual Studio, korzystając z ToolboxBitmapAttribute Aby skojarzyć ikonę z składnik niestandardowy, mapa bitowa nie jest wyświetlany w przyborniku składników wygenerowany automatycznie.Aby wyświetlić mapę bitową, ponownego ładowania formantu za pomocą Choose Toolbox Items okno dialogowe.Aby uzyskać więcej informacji, zobacz Ikony przybornika.

Zobacz też

Zadania

Jak: usług dostępu w czasie projektowania

Koncepcje

Błędy w czasie projektowania w projektancie Windows Forms

Inne zasoby

Rozszerzenie wsparcia w czasie projektowania