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