2010-09-16 11 views
12

Buduję kontrolkę, która składa się z przycisków 15x15 = 225 i wymaga zmiany rozmiaru. Ponieważ jest to siatka, zakotwiczenie i dokowanie nie będą działać. Próbowałem już zarówno TableLayoutPanel, jak i obsługi zdarzenia resize, aby ręcznie umieszczać i kontrolować rozmiar. W obu przypadkach zmiana rozmiaru jest niedopuszczalnie powolna. Zawieszenie/wznowienie układu w funkcji zmiany rozmiaru, gdy ręcznie obsługuję układ, nie pomaga.C# WinForm: Efektywnie wyświetla wiele kontrolek

Czy jest coś fundamentalnego, co mogę zmienić, aby przyspieszyć działanie, czy jest to tylko ograniczenie natywnych elementów sterujących? Rozumiem, że mogę utworzyć niestandardową kontrolę od zera, obsługując kliknięcia i malując siebie - chociaż wolałbym trzymać się natywnych elementów sterujących, jeśli to możliwe.

Edit

Wiem, że wiele przycisków. Moje pytanie jest techniczne; nie jeden o projekcie interfejsu użytkownika.

+2

To piekielnie dużo przycisków. Do czego do cholery potrzebujesz tyle przycisków? –

+0

+1 do Alastaira Pittsa. Powinniśmy unikać tak wielu przycisków pojawiających się w GUI. Myślę, że użytkownicy końcowi też się ze mną zgadzają. –

+0

Profiluj aplikację podczas zmiany rozmiaru, aby zobaczyć, dlaczego trwa to tak długo. –

Odpowiedz

6

WinForms nie radzi sobie z wyświetlaniem wielu kontrolek w tym samym czasie, niestety.

Gdybym był w twojej sytuacji, zastanawiałbym się najpierw, czy mogę podzielić formularz na kilka stron. W wielu przypadkach będzie to łatwiejsze do zrozumienia również dla użytkownika.

Ale w twoim przypadku nie wydaje się to możliwe. Czy robisz coś w stylu gry trałowej? Nie masz siatki przycisków, które wszystkie można kliknąć. W takiej sytuacji sugerowałbym, abyś wybrał niestandardową kontrolę właściciela, w której konsolidujesz wszystkie przyciski w jednym kontrolerze. Nie buduj złożonego sterowania zawierającego 225 przycisków - to wcale nie pomoże :-)

Ostatnią opcją może być przełączenie do WPF. WPF używa renderowania przyspieszanego sprzętowo, więc może być szybsze, ale przy tak wielu kontrolkach nawet to nie pomoże.

+0

Gotcha. Czy możesz wskazać mi coś poza "po prostu nie umiesz sobie z tym poradzić" - czy jest gdzieś blog/wyjaśnienie wydajności, które może mi pomóc zrozumieć, co powoduje śmierć? +1 za to, że nie próbuje inteligentnie ominąć technicznego pytania. Wiem, że to dużo przycisków i rozumiem to. Niestandardowa kontrola to jest. – phillipwei

+0

Mówię tu o osobistym doświadczeniu :-) Znacznie lepiej niż jakikolwiek post na blogu ... hehe. –

+0

Nie, naprawdę. Próbowałem robić podobne rzeczy i skończyłem z całkowicie bezużyteczną formą. Wydajność jest ok do pewnego momentu, w którym się zepsuje. Może uda ci się uciec siatką 10x10, może 12x12 lub 8x8, ale w pewnym momencie stanie się ona bezużyteczna. –