2012-01-24 8 views
8

Aby wyłączyć projektanta komponentów na klasach, wystarczy dodać atrybut [System.ComponentModel.DesignerCategory ("")], jednak nie działa on dla żadnej klasy pochodzą z tej klasy w dowolnym pokoleniu. Np .:Jak wyłączyć projektanta w klasach pochodnych w następnych generacjach

Dzieje się to oczywiście w dowolnych innych generacjach i permutacjach. Na przykład.

//Whatever attribute here 
public class C:B {} //Designer is enabled here 

Czy ktoś kiedykolwiek próbował się go pozbyć? Dlaczego model komponentu próbuje dodać obsługę projektanta, nawet jeśli został wyraźnie wyłączony w pierwszej generacji?

Dziękuję

+0

Bardzo niejasne jest, w których zespołach występują te klasy i czy są one częścią rozwiązania. Ustawienie "AutoPopulate" w pasku narzędzi ma pierwszeństwo. –

+0

to nie jest wzmianka. albo f klasa bazowa i klasy pochodne w tym samym zespole lub są w różnych złożeniach zachowanie jest takie samo (tylko klasa bazowa [jedna bezpośrednio pochodzi z ServiceBase] nie ma na niej żadnego projektanta) – Tamir

Odpowiedz

7

Powodem takiego zachowania jest buforowane zespoły odwołuje. Aby go rozwiązać, usuń odniesienie do zespołu zawierającego serwer bazowy z atrybutem i dodaj go ponownie. W takim przypadku projekt rekonstrukcji Visual Studio nie zdefiniuje domyślnego edytora dla klasy.

+2

Miałem ten sam problem, i to działało dla mnie. Moja klasa bazowa pochodzi z 'System.ComponentModel.Component' i musiałem usunąć odniesienie do' System', a następnie dodać go ponownie. Wszystkie pochodne klasy są teraz domyślnie otwierane za pomocą edytora kodu. Dzięki! – Ove

+0

to była podstęp! Dzięki! –

0

"Dziedziczenie atrybutów" początkowo wydawało mi się dziwne, ponieważ zawsze uważałem, że atrybuty nie zostały odziedziczone; po sprawdzeniu docs.microsoft.com odkryłem, że nie musi być przypadek - atrybuty mogą mieć Inherited = true, więc dzięki za pomoc mi poszerzyć moją wiedzę :-)

Dodatkowo, miałem również usunąć kilka <SubType>Component</SubType> wpisów z pliku .csproj

Powiązane problemy