2014-12-15 12 views
5

Tak więc utworzę układ formularza i spróbuję ustawić minimalną wielkość tylko po to, aby przekonać się, że WinForm ma dopasowanie! Więc tutaj jest to, co wygląda na to, kiedy zacznę się z własności MinimumSize ustawić tylko dla szerokości ...Projektant formularzy programu Visual Studio zmienia układ po ponownym otwarciu ze względu na minimalny rozmiar

enter image description here

Jak widać, że świetnie wygląda, bez dodatkowych spacji, forma jest rozmiar I chce etc ... Następnie, próbuję zamknąć formularz i otworzyć go z powrotem, mam małą dziwność (wysokość MinimumSize została ustawiona na 0, a teraz WinForms ma 38), ale cokolwiek nadal działa zgodnie z oczekiwaniami ..

enter image description here

OK dobrze, że dziwne "38" na MinimumSize-HEIG To dziwne, ale cokolwiek, pozwólcie, że spróbuję ustawić moją minimalną różnicę wysokości na 420 (taki sam rozmiar jak w formularzu).

enter image description here

zapisać, zamknąć i ponownie otworzyć formularz projektant ... WTF? Wszystko poszło nie tak! Moje trzy przyciski na dole zostały wszystkie wypchnięte, więc pole tekstowe i widok drzewa, które mam nad nim, a także wysokość lewego listview zostały zmienione. W rzeczywistości patrząc na to wydaje się, że kontrole są cały czas poprawne. Zmienną, która się zmieniła, jest rozmiar formularza. Jakoś minęło od 420 do 442 ???

enter image description here

ktoś ma jakiś pomysł, dlaczego ta utrzymuje się stało? Co mogę zrobić, aby to naprawić, lub chyba pracować nad tym? Proszę pamiętać, że mam przyciski i pole tekstowe zakotwiczone na dole. Widok drzewa musi pozostać zakotwiczony na górze i rosnąć wraz z jego wielkością.

Dzięki!

+0

Przepraszam, myślałem, że byłoby bardziej zrozumiałe. Wszystko jest w porządku, dopóki nie ustawię minimalnego rozmiaru. Więc nie powinno być nic, jeśli chodzi o kod. Co więcej, jest to całkowicie pusta forma z obiektami dodanymi do formularza. Brak kodu poza standardowym kodem projektanta. Ale zauważyłem coś ... Nie dzieje się tak, gdy dodam ponownie ControlBox. Dzieje się tak tylko wtedy, gdy ControlBox = False. Ale wciąż szuka pracy. –

Odpowiedz

5

To oczywiście błąd projektanta. Jest wywoływany przez funkcję WinForm, która jest generalnie kłopotliwa dla projektanta, nigdy właściwie nie przechowuje właściwości Size. Coś, co można zobaczyć w wygenerowanym automatycznie kodzie w pliku Designer.cs formularza. Zamiast tego przechowuje ClientSize i oblicza Rozmiar na podstawie tej wartości. Bardzo potrzebna funkcja, wysokość paska napisów jest nieprzewidywalna, zależy to od konfiguracji użytkownika.

To, co powoduje błąd w twoim przypadku, to ustawienie właściwości ControlBox na False. To również wyłącza ikonę i to dziąsło oblicza wielkość zewnętrzną. Coś związanego z kolejnością, w której właściwości są przypisane, myślę, że klasa Form powinna zaimplementować ISupportInitialize, ale nie robi. Wartość 38 dla MinimumSize.Height jest efektem ubocznym, czyli wysokością paska napisów na twoim komputerze. Nie można zmniejszyć rozmiaru okna. Ograniczenie, które stosuje się również w czasie projektowania, kolejne dziwactwo.

Sposób obejścia jest prosty. Ustaw właściwość ControlBox z powrotem na True i po prostu ustaw jej wartość w konstruktorze Form:

public Form1() { 
     InitializeComponent(); 
     this.ControlBox = false; 
    } 
+0

LOL, dzięki! doskonałe wyjaśnienie. I zaraz po tym zorientowałem się, co jest przyczyną problemu !! :) –

Powiązane problemy