2009-08-31 8 views
5

Jestem zaskoczony dziwnym zachowaniem w edytorze formularzy Visual Studio. Widziałem to w kilku różnych formach w mojej aplikacji. Za każdym razem, gdy otwierasz formularz w edytorze układu Visual Studio, niektóre elementy sterujące będą znajdować się w innym miejscu niż podczas ich opuszczania. Zazwyczaj niektóre przyciski przesuwają się nieznacznie w prawym dolnym rogu. Ale to nie tylko przyciski, w jednym przypadku to panel kontenera, który się porusza. Muszę zmienić ich położenie, a następnie zapisać i zamknąć formularz. Potwierdziłem, że to edytor layoutów faktycznie zmienia właściwość Location po otwarciu formularza, ponieważ jeśli zapiszę i zamknę formularz za pomocą przycisków w poprawnej pozycji, będą one poprawne w czasie wykonywania.Kontrolki WinForms są przemieszczane za każdym razem, gdy formularz jest wyświetlany

To nie jest problem z niepoprawnym ustawieniem właściwości Anchor lub Dock. Edytor faktycznie zmienia właściwość moich kontrolek (Location). Sprawdziłem plik .designer.cs i nie widzę niczego niezwykłego. Próbowałem usunąć i ponownie utworzyć te formanty, ale problem nadal występuje.

Jakieś pomysły, co mogę zrobić?

To nie jest stoper show Po prostu muszę bardzo uważać, aby ręcznie sterować elementami sterującymi za każdym razem, gdy otwieram je w edytorze układu WinForm.

Edycja: Visual Studio faktycznie pobiera plik automatycznie, aby ustawić Location na to, co uparcie uważa, że ​​powinno być.

+1

Czy to VS2008 akcji lub nanosi SP1? – Powerlord

+0

Tak, zainstalowano dodatek SP1. Wersja VS2008 Team Edition + SP1. –

+0

Hi. Czy znalazłeś rozwiązanie tego problemu? Nagle doświadczam dokładnie takiego samego zachowania! – Jalil

Odpowiedz

2

Znalazłem odpowiedź na ten problem, ale to po prostu wygląda jak błąd dla mnie. To nigdy nie zostało rozwiązane od 2003 roku!

W skrócie: Dziedziczenie wizualne nie działa dobrze w przypadku zakotwiczenia.

pełna odpowiedź tutaj: http://weblogs.asp.net/rweigelt/archive/2003/09/24/28984.aspx

+0

to naprawiło twój problem? Nie mam już dostępu do kodu, więc nie mogę go przetestować. –

+0

Może mógłbyś wypróbować nawet cyfry na archorygach itp .;-) – Andrew

+0

Akceptuję tę odpowiedź na podstawie wyników Jalila i dlatego, że pytanie to było otwarte od tak dawna, to wydaje się najlepszą odpowiedzią, jaką otrzymamy. Ale jako pierwotny autor pytania nie mogę powiedzieć z całkowitą pewnością, czy naprawiłoby to mój pierwotny problem, ponieważ nie mam już dostępu do tego kodu. –

0

Najprawdopodobniej jest to problem związany z DPI. Sprawdź właściwość designer.cs dla właściwości AutoScaleMode i spróbuj ją zmienić (lub dodać), aby ustawić formularz.AutoscaleMode = Czcionka

+0

To było już ustawione na AutoScaleMode = Font, tak samo jak wszystkie moje inne formularze. –

0

Spróbuj zablokować elementy sterujące w trybie projektowania, a następnie zobacz, jak to działa.

+0

Nie wspomniałem o tym, ale spróbowałem. –

1

zgadzam się z PaulG jego najprawdopodobniej problem związany z DPI

proszę zmienić ustawienia karty graficznej z dużym (120 DPI) Normalny (96 dpi).

+0

To nie działa dla mnie. – Jalil

2

Edytor WinForms to WYSIWYG, który wymaga od edytora wykonania kodu układu, aby pokazać dokładnie, jak będzie wyglądać formularz. Chociaż jest to bardzo wygodne, istnieje szereg problemów związanych z kurczakiem i jajkiem, które zaczynają siać spustoszenie w twoim edytorze.

Typowym problemem jest rozmiar. Czasem właściwości sterowania są niepoprawnie uporządkowane (a ponieważ są generowane automatycznie, nie można tego naprawić). W rezultacie pewna potrzebna wartość nie zostanie ustawiona przed właściwością, która jej potrzebuje. Znanym przykładem jest SplitContainer i MinSize z Panel2 (patrz http://social.msdn.microsoft.com/Forums/en-US/winformsdesigner/thread/ee6abc76-f35a-41a4-a1ff-5be942ae3425). Możliwe, że występuje podobny problem root, ale w rezultacie zmienia się położenie kontrolek.

Chciałbym zbadać kolejność twoich właściwości w Projektancie i spróbować ustalić, czy to może być źródłem problemu. Jeśli tak, może być konieczne ustawienie niektórych właściwości w czasie wykonywania. Generalnie jednak rzadko istnieje prawdziwa "poprawka" - rozdzielczość jest częściej niż "obejściem".

Tego rodzaju problemy były częścią motywacji do tworzenia WPF. Deklaratywny charakter XAML pomaga zapobiegać tego rodzaju zdarzeniom, jednocześnie zapewniając odczucie WYSIWYG.

Powiązane problemy