ogólny problemSplitContainer panel Resize Issue
Aplikacja jest C# .NET WinForms 4.0.
Mam SplitContainer
, który zajmuje większą część formularza, jest ustawiony na Anchor we wszystkich kierunkach, więc ponownie rozmiar wraz z formularzem. Lewy panel (Panel1) ma proste menu, tutaj nie ma problemów. Prawy panel (Panel2) jest bardziej złożony i zawiera wiele zagnieżdżonych elementów sterujących tabulaturami (z dużą ilością kontrolek) - jest boleśnie skomplikowany, ale się nie zmienia.
Problem polega na tym, że zmiana rozmiaru formularza nie działa tak dobrze. W rzeczywistości, jeśli zmieniasz rozmiar przeciągając krawędzie powoli, to działa dobrze, ale przeciągnij szybko lub użyj przycisku "przywróć" (w prawym górnym rogu formularza), a następnie pojawia się problem.
moją kontrolą Hierarchia
Poniżej znajduje się prosty przykład mojej hierarchii sterowania, jego zdecydowanie obniżyć wersji, ale ma podkreślić zagnieżdżony kontrolę zakładki, które mogą pomóc w replikacji:
- Formularz
- Podział kontenerów (anchor: góra, lewo, dół, prawo)
- SC Panel1 (min Szerokość: 300)
- TreeViewControl (zapomnieć jak to się nazywa)
- SC Panel2
- panel (anchor: góra, lewo, dół, prawo)
- Sterowanie zakładkami (zakotwiczenie: u góry, po lewej, u dołu, po prawej)
- Sterowanie zakładkami w/wiele stron, które przepełniają ekran i wymagają przycisków nawigacji do wyświetlenia p prawy narożnik (anchor: góra, lewo, dół, prawo)
- Sterowanie zakładkami (zakotwiczenie: u góry, po lewej, u dołu, po prawej)
- panel (anchor: góra, lewo, dół, prawo)
- SC Panel1 (min Szerokość: 300)
- Podział kontenerów (anchor: góra, lewo, dół, prawo)
Debug Szczegóły
Po pewnym debugowania to wydaje się, że w rzeczywistości jest to Panel2
(element podrzędny podzielonego kontenera), który nie zmienia rozmiaru poprawnie, a sam plik SplitContainer
zmienia rozmiar w porządku.
Oto wartości debugowania, które pokazują to ...
pełnej formie szerokość przed zmianą rozmiaru:
splitContainerMain.Width: 1479
splitContainerMain.Panel2.Width: 1206
panelCenter.Width: 1203
tabControlMain.Width: 1215
Wszystko zgodnie z oczekiwaniami, splitContainerMain.Panel2.Width
jest mniejszy niż splitContainerMain.Width
.
Po zmianą rozmiaru, gdzie występuje problem:
splitContainerMain.Width: 815
splitContainerMain.Panel2.Width: 1206
panelCenter.Width: 1203
tabControlMain.Width: 1215
Jak można zauważyć, splitContainerMain.Width
został zmieniony zgodnie z oczekiwaniami, ale splitContainerMain.Panel2.Width
a następnie jej dzieci nie mają.
UWAGA: Proszę pamiętać, szerokość aktualizacje poprawnie jeśli ręcznie zmienić rozmiar formularza powoli - to nie jest problem ze mną nie poprawnie ustawiania żadnych kotwic.
moich wysiłków So Far
Zastanawiam się, czy problem jest related to this problem here, ale nie jestem przygotowany, aby utworzyć nową „MySplitContainer”, aby spróbować rozwiązać ten problem.
Próbowałem użyć różnych zdarzeń zmiany rozmiaru formularza i spróbować ustawić szerokość ręcznie, ale bezskutecznie. Myślę, że chciałbym spróbować ustawić wartość Panel2.Width
z jakiegoś zdarzenia.
Co ja szukam
- Czy mimo to wymusić
splitContainerMain.Panel2.Width
prawidłowego rozmiaru, gdy zmianysplitContainerMain
rozmiar? - Alternatywnie, w jaki sposób mogę obliczyć wartość
Panel2.Width
? I jak mogę ustawić tę wartość ze zdarzeniaForm.Resize
? (lub inne zdarzenie?)
starałem się ułożyła formę do przetestowania, ale Jeszcze nie widziałem złego zachowania, jak opisałeś. Jeśli możesz podać więcej szczegółów układu, to pomogłoby to. Ale w przeciwnym razie nie będę miał dużo szczęścia, odtwarzając twoje wyniki. – DonBoitnott
@DonBoitnott: Dodałem trochę szczegółów na temat mojego układu, wiem, że to nie będzie łatwe do zreplikowania, ale być może coś zrobi. Zobaczę, czy mogę zreplikować w nowej aplikacji WinForm też: – musefan
Co to jest 'panelCenter'? A jak zmieniasz rozmiar ... w kodzie? ... po prostu przeciągając krawędź formy? – DonBoitnott