2013-07-22 11 views
5

Jakie są zasady, które muszę przestrzegać, aby Formularz przewijania ...Przewijany Form w C#, AutoScroll = true nie działa

ja prosty ustawić właściwość AutoScroll true. Próbowałem też podczas Auto Scroll jest prawdą, aby ustawić AutoSize true/false, ale żaden z nich nie pracował ... Próbowałem również umieścić panel i dodać wszystkie składniki tam ... nadal nic ...

Może korzystania V or HScrollBar może pomóc, ale ja naprawdę nie wiem, jak połączyć go z Formularza ...

form.AutoScroll = true; 
formMainLayout.AutoScroll = true; 
rootPanel.AutoScroll = true; 
+0

Twoje dziecko kontroluje ukryć się przed formularzem? –

+0

Co masz na myśli, mówiąc, że "formanty podrzędne" ukrywają się przed formą? jeśli chodzi o to, forma ma tę kontrolę. Dodaj: rootPanel, rootPanel ma formMainLayout, a formMainLayout ma wszystkie inne kontrolki – jovanMeshkov

+0

Mam na myśli, jeśli twój rozmiar formularza wynosi (200,200). czy któreś z twoich kontroli podrzędnych istnieje poza tym? (powyżej 200,200) –

Odpowiedz

3

Zawartość kontroluje przewijanie. Paski przewijania nie pojawiają się, chyba że są potrzebne. Zazwyczaj dostępna jest właściwość, którą można ustawić, aby była zawsze widoczna, a po prostu wyłączona, dopóki nie będzie potrzebna.

Właściwość AutoScroll musi być true, jak już znalazłeś. Ale wtedy zawartość przewijalnego elementu sterującego musi wymusić na kontrolerze nadrzędnym wyświetlanie pasków przewijania. Ta część zależy od tego, w jaki sposób kontrole są wbudowane w rodzica.

Wypróbuj te dwa eksperymenty:

  1. Umieść Panel w formularzu i zadokować go Fill. Ustaw właściwość AutoScroll panelu na true. W tym panelu umieść TextBox i ustaw go również jako Fill. Ustaw także MultiLine na true. Uruchom aplikację, a zauważysz, że rozmiar obu jest po prostu przy użyciu dostępnego miejsca ... nie może wystąpić przewijanie, ponieważ ani Panel, ani jego TextBox nie stają się większe niż przestrzeń, którą zajmują.

  2. Wykonaj te same czynności jak w punkcie 1, ale tym razem nie zadokuj urządzenia TextBox. Zamiast tego ustaw go na duży rozmiar, coś, co wiesz, będzie większe niż widoczna liczba Panel. Uruchomienie aplikacji powinno teraz spowodować przewijanie Panel.

Mam nadzieję, że ten mały test pomoże zademonstrować, co kontroluje przewijanie formularza.

+0

Przepraszam, ale nie jestem pewien, co miałeś na myśli, "Forma sama w sobie nie jest przewijaną kontrolą". Formularz jest przewijany jak każda inna kontrolka: spełnione są warunki automatycznego przewijania + (zawarte kontrolki poza granicami) lub pasek przewijania/pasek przeskoku. Ponadto, nie jestem zbyt pewny co do faktycznego/bezpośredniego zastosowania tego, co mówisz, aby odpowiedzieć na pytanie "dlaczego, kiedy ustawiłem AutoScroll na wartość true, nie widzę paska?". – varocarbas

+1

@varocarbas Twój punkt jest dobrze zrobiony. Usunąłem tę część mojej odpowiedzi. W odniesieniu do drugiej części komentarza, oto pytanie, które próbuję zademonstrować na pytanie: "Jakie zasady muszę przestrzegać, aby forma była przewijana". – DonBoitnott

+0

Dzięki. Teraz wszystko jest bardziej przejrzyste. – varocarbas

0

Obiekt AutoScroll powinien działać dobrze, ale najprawdopodobniej nie używasz rację: pasek pojawia się tylko, gdy wymagany. Przykład: minimalna wartość Y z Form wynosi 0, a minimalna wartość Y jednej z kontrolek w nim (TextBox) wynosi -20.

Jeśli chcesz dołączyć pasek przewijania, niezależnie od tego (kontrolki wewnątrz granic formularza), możesz to zrobić. Przykładowy kod (from MSDN) dla pionowego paska przewijania:

// Create and initialize a VScrollBar. 
VScrollBar vScrollBar1 = new VScrollBar(); 

// Dock the scroll bar to the right side of the form. 
vScrollBar1.Dock = DockStyle.Right; 

// Add the scroll bar to the form. 
Controls.Add(vScrollBar1); 
3

Byłem też ten sam problem, udało mi się go naprawić ... Wszystkie kontrole dziecko wewnątrz panelu miał lewo & Prawy kotwica, a kiedy tylko ustawić kotwicę do górnej części, paski przewijania, gdzie działają dobrze.

Nie jestem pewien, dlaczego Lewy i Prawy kotwica (z formantów podrzędnych) wymusza panel nie pokazywać przewijania.

Ale tak czy inaczej ... mam nadzieję, że to pomoże każdemu od tej daty.