Visual Studio 2008 IDE nie wyświetla poprawnie Custom Controls
Mam problem w czasie projektowania ze wszystkimi moimi formularzami i niestandardowymi kontrolkami w Visual Studios 2008. Aż do poprzedniego zameldowania wszystkie formanty były renderowane zgodnie z oczekiwaniami. Jedyną główną różnicą między bieżącą wersją a poprzednią wersją roboczą była właściwość kontrolkiUIText
został zmieniony zContent
doValue
. Pozostałe zmiany dodają nowy formularz i 3 nowe wyliczenia, ale z pewnością nie ma żadnej oczywistej zmiany, która wpłynęłaby na wszystkie formy w programie (w tym nowe).
Wszystkie elementy sterujące (na każdym formularzu) są teraz renderowane jako ramka z nazwą kontrolki (jednak wszystkie renderowane poprawnie w czasie wykonywania):
Próbowałem utworzyć zupełnie nowy formularz w moim projekcie, tworząc zupełnie nową niestandardową kontrolę z tylko etykietą, a ja wciąż mam dokładnie ten sam problem:
Zwróć uwagę, że standardowe formanty formularzy .Net działają poprawnie, więc jest to tylko problem z niestandardowymi kontrolkami.
Jeśli przywrócę poprzednią wersję z repozytorium, wszystko zacznie się poprawnie renderować ponownie:
Mogłem po prostu wrócić do tej działającej wersji i kontynuować, ale wolałbym wiedzieć, jak rozwiązać ten problem, gdyby wystąpił ponownie. Publikuję tutaj, mając nadzieję, że jest to problem programistyczny związany z wydaniem Visual Studios 2008 (tak na marginesie, SP1).
AKTUALIZACJA - Wykryto problem, nie można go wyjaśnićI naprawiony problem. Naprawdę nie jest to właściwe słowo. Znalazłem problem, usuwając jednocześnie wszystkie formanty użytkownika 1, dopóki formularz nie zaczął poprawnie renderować. Problem był w mojej kontroli podpisu (który był obecny od wieków, tylko w moim ostatnim zameldowaniu dodałem odniesienie do projektuiVirtualDocket.CodeLibrary
do głównego projektu:
<code> iVirtualDocket - References iVirtualDocket.UIControls - References iVirtualDocket.CodeLibrary iVirtualDocket.UIControls -References iVirtualDocket.CodeLibrary </code>
Podpis ma właściwość o nazwieSignatureData
, który to robił:
<code>public byte[] SignatureData { get { if (_signature == null) { return null; } else { return iVirtualDocket.CodeLibrary.Conversions.ImageToByteArray( _signature, ImageFormat.Png); } } } </code>
ImageToByteArray wygląda następująco:
<code>public static byte[] ImageToByteArray(Image imageToConvert, ImageFormat formatOfImage) { byte[] ret; using (MemoryStream ms = new MemoryStream()) { imageToConvert.Save(ms, formatOfImage); ret = ms.ToArray(); } return ret; } </code>
Jeśli przeniosę powyższą metodę doUIControls
projekt, wtedy wszystko działa dobrze. Jednak jak tylko przywrócę metodę doCodeLibrary
projekt i wywołaj go tam, wszystkie moje formularze przestają wyświetlać UserControls.
Dlatego następujące czynności naprawiają problem, ale naprawdę chciałbym wiedzieć, dlaczego:
<code>public byte[] SignatureData { get { if (_signature == null) { return null; } else { // Need to call this code directly here instead of through // the CodeLibrary conversions, otherwise all user controls stop // rendering in design mode byte[] ret; using (MemoryStream ms = new MemoryStream()) { _signature.Save(ms, ImageFormat.Png); ret = ms.ToArray(); } return ret; } } } </code>
(Co jeszcze bardziej dziwne, że nawet nie korzystam z tej właściwości.)