Jaka jest różnica między kontrolą użytkownika, kontrolą niestandardową i komponentem?

82

Są to trzy różne rzeczy, które możesz dodać do projektu i nie jestem do końca pewien, czy rozumiem różnicę. Wydaje się, że wszystkie pojawiają się na przykład w przyborniku komponentów podczas pracy z plikiem Form. Jakie są typowe scenariusze użycia dla każdego z nich? Jaka jest różnica?

Svish
źródło

Odpowiedzi:

163

Główna różnica między kontrolą użytkownika, kontrolą niestandardową i komponentem polega na tym, że dziedziczą one z różnych poziomów w drzewie dziedziczenia:

MyComponent
   |-> Component

MyCustomControl
   |-> Control
          |-> Component

MyUserControl
   |-> ContainerControl
          |-> ScrollableControl
                 |-> Control
                        |-> Component

Krótko mówiąc, z różnymi opcjami otrzymujesz inną ilość wstępnie okablowanych funkcji.

Kiedy użyłbyś różnych opcji? (to są myśli i opinie, a nie prawdy)

  • Utwórz komponent, jeśli chcesz zapewnić funkcjonalność bez interfejsu użytkownika (taką jak komponenty timera, źródła danych, ...)
  • Utwórz niestandardową kontrolkę, jeśli chcesz stworzyć komponent, w którym masz pełną kontrolę nad jej wyglądem i nie chcesz żadnego bagażu niepotrzebnych funkcjonalności. Typowe przypadki to proste elementy sterujące o ograniczonej funkcjonalności (takie jak przycisk)
  • Utwórz kontrolkę użytkownika, jeśli zamierzasz połączyć istniejące kontrolki w bloki konstrukcyjne wielokrotnego użytku (na przykład dwie listy z przyciskami, za pomocą których można przenosić elementy między listami).
Fredrik Mörk
źródło
16
Tak, zajęło mi trochę czasu, zanim się zorientowałem, ale wydaje się, że jest UserControlto naprawdę kontrolka „złożona” (kontrolka utworzona z innych kontrolek), podczas gdy kontrolka niestandardowa jest w rzeczywistości kontrolką zaprojektowaną przez użytkownika.
Dave Cousineau
Jeśli chcesz utworzyć kontrolkę składającą się z kilku pól tekstowych z niestandardową i dynamicznie rysowaną grafiką między nimi, czy powinienem wybrać UserControl?
Nick Alexeev
@NickAlexeev Nie pracowałem zbyt wiele w świecie winforms od kilku lat, ale uważam, że to byłby właściwy sposób, tak.
Fredrik Mörk
2
@ FredrikMörk Dobra odpowiedź! czy możesz zasugerować witrynę, na której moglibyśmy dowiedzieć się, jak tworzyć niestandardowe kontrolki?
John Odom
1
Seria @John Odom AngelSix na youtube jest tym, z którym warto się wybrać. Sprawdziłem i wiem, że jest na wideo 9 i żeby być konkretnym, użył go o 26:00
Mour_Ka
2

Dodając do tego, co powiedział Fredrik, ogólnie komponenty i niestandardowe kontrolki byłyby używane, gdy planujesz ich ponowne użycie w różnych projektach. Używaj kontrolek użytkownika, gdy chcesz ich używać tylko w jednym projekcie.

Czad
źródło
10
Dlaczego tak? Korzyści z używania kontrolki użytkownika w jednym projekcie, ograniczenie do wykorzystania w kilku projektach ...?
Camilo Martin,
1

Uważam, że ostatnie stwierdzenie nie jest moim zdaniem poprawne. Tworzę kontrolki użytkownika z wielu różnych powodów.

Głównym powodem jest to, że jeśli na przykład zaprojektuję interfejs wielu elementów sterujących zgrupowanych razem.

Najpierw tworzę bibliotekę klas, a następnie dodaję do niej kontrolki użytkownika. Teraz, jeśli muszę zmienić jakąkolwiek część logiki związanej z działaniem kontroli użytkownika, mogę bardzo łatwo. Również ta biblioteka klas może być używana wielokrotnie.

Również w tej samej klasycznej bibliotece mogę mieć wiele klas, które mogą być współużytkowane i używane dla dowolnej kontrolki użytkownika.

To jest główny powód, dla którego używam kontroli użytkownika. A jeśli wprowadzisz zmianę w kontrolce użytkownika lub bibliotece klas. po zbudowaniu pracy. dll będzie dynamicznie aktualizowana w folderze bin.

Więc jeśli odwołuję się do tego w innym projekcie Te zmiany pojawią się również w nowym projekcie.

Ponadto nie używa tych samych procedur malowania, co formularz i wszystko, co załadowałeś do formularza.

Tak więc kontrolki użytkownika dają nam możliwość bycia bardzo modułowymi. I mogę mieć wielu kontrolek użytkownika, które współużytkują podstawowe klasy biblioteki klas ... Tak więc kontrola użytkownika nie jest przeznaczona dla jednego projektu. Nie ma w tym zakresie żadnych ograniczeń. jeff

Robopro
źródło
Odp. „Uważam, że ostatnie stwierdzenie nie jest moim zdaniem poprawne” - ostatnie stwierdzenie czego ? [I najlepiej byłoby zacytować to stwierdzenie w swojej odpowiedzi, aby czytelnicy od razu wiedzieli, o czym mówisz.]
ToolmakerSteve
-5

Główna różnica między nimi - Kontrola użytkownika to plik strony z rozszerzeniem .ascx, który może być używany tylko w ramach jednej aplikacji lub projektu. Ale kontrolki niestandardowe to zestawy (pliki dll), które mogą być używane w wielu aplikacjach.

Himanshu Namdeo
źródło
7
Pytanie dotyczyło WinForms, a nie ASP.NET.
Qwertie