Jak umieścić UserControl w oknie narzędzi programu Visual Studio

94

Zrobiłem kontrolę użytkownika w moim projekcie i po utworzeniu projektu muszę umieścić ją w moim przyborniku i używać jej jako wspólnej kontroli. ale nie mogę. UserControljest w moim nazw projektów, a ja starałem Choose Itemsię w prawym przyciskiem myszy menu, ale nie mogę znaleźć sposób, aby go dodać.

Saeed
źródło

Odpowiedzi:

116

Zakładam, że używasz VS2010 (to właśnie oznaczyłeś pytanie jako). Miałem problemy z automatycznym dodaniem ich do zestawu narzędzi, tak jak w VS2008 / 2005. W rzeczywistości istnieje opcja zatrzymania automatycznego wypełniania zestawu narzędzi!

Przejdź do pozycji Narzędzia> Opcje> Projektant formularzy systemu Windows> Ogólne

Na dole listy znajdziesz Przybornik> AutoToolboxPopulate, który przy nowej instalacji ma domyślnie wartość False. Ustaw to jako prawdę, a następnie odbuduj swoje rozwiązanie.

Hej, presto, kontrolki użytkownika w twoim rozwiązaniu powinny być automatycznie dodane do przybornika. Konieczne może być również ponowne załadowanie rozwiązania.

DaveF
źródło
32
Kluczowym słowem dla mnie było „odbudować”… nie próbowałem tego, d'oh! Samo to załatwiło to dla mnie.
Danny Beckett
2
I musiałem ponownie otworzyć rozwiązanie po przebudowie
Jim Lahman
1
W VS2012 dodali teraz wskazówkę „Obecne rozwiązanie musi zostać ponownie otwarte, aby to odniosło skutek” do okna dialogowego opcji.
Carlos P
2
@AnatoliiGumennyi Będziesz musiał postępować zgodnie z instrukcjami @ Arseny, jeśli UserControljest poza bieżącym projektem.
Attacktive
2
Uwaga: Wygląda na to, że w VS2013 ustawienie Toolbox> AutoToolboxPopulate ma teraz wartość domyślną True podczas nowej instalacji.
Curmudgeon
36

Kliknij prawym przyciskiem myszy pasek narzędzi, a następnie kliknij „wybierz element” w menu kontekstowym. Pojawi się okno dialogowe z zarejestrowanymi komponentami. w tym oknie dialogowym kliknij "Przeglądaj", aby wybrać swój zespół z kontrolką użytkownika, której chcesz użyć.

PS. Ten zespół powinien zostać wcześniej zarejestrowany.

Arseny
źródło
17
Czy możesz wyjaśnić, że „zarejestrowałem się wcześniej”? Myślę, że to nie jest wymagane.
Henk Holterman
25

Odkryłem, że kontrolka użytkownika musi mieć konstruktor bez parametrów, inaczej nie pojawi się na liście. przynajmniej tak było w vs2005.

scott
źródło
8
Również w vs2012.
colbybhearn
8
Również w vs2013.
Connor McGuinness,
6
Również w vs2015?
serdar
5
Tak, także w vs2015
JRB,
5
Dodaj vs2017 do listy
Ryan
14

Korzystanie z VS 2010:

Załóżmy, że masz projekt Windows.Forms. Dodajesz UserControl (powiedzmy MyControl) do projektu i projektujesz to wszystko. Teraz chcesz dodać go do swojego zestawu narzędzi.

Gdy tylko projekt zostanie pomyślnie zbudowany, pojawi się w komponentach Framework. Kliknij prawym przyciskiem myszy Toolbox, aby wyświetlić menu kontekstowe, wybierz „Wybierz elementy ...” i przejdź do nazwy kontrolki (MyControl) w zakładce „.NET Framework Components”.

Zaleta w stosunku do używania bibliotek dll: możesz edytować kontrolki w tym samym projekcie co formularz, a formularz zostanie skompilowany z nowymi kontrolkami. Jednak kontrola będzie dostępna tylko dla tego projektu.

Uwaga: jeśli formant zawiera błędy kompilacji, rozwiąż je przed przejściem do formularzy zawierających lub projektant ma zawał serca.

Nacięcie
źródło
1
Może być również dostępny dla innych projektów, jeśli zaimportujesz plik .exe z przybornika.
Sebastian
1
Każda odpowiedź zawierająca „lub projektant ma atak serca” otrzymuje mój głos!
Joel
Zrobiłem to samo i wszystko jest w porządku, ale kiedy przeniosłem kod do innego projektu, utworzyłem dll i odwołałem się do pliku dll, niestandardowa kontrolka nie pojawia się.
Fandi Susanto
6

Miałem wielu kontrolek użytkowników, ale jeden odmówił wyświetlenia w Zestawie narzędzi , mimo że przebudowałem rozwiązanie i zostało zaznaczone w oknie dialogowym Wybierz elementy ...

Rozwiązanie:

  1. W Eksploratorze rozwiązań I Kliknąłem prawym przyciskiem myszy plik kontroli użytkownika powodującego problem i wybrano opcję Wyklucz z projektu
  2. Odbuduj rozwiązanie
  3. Kliknij prawym przyciskiem myszy kontrolkę użytkownika i wybierz Uwzględnij w projekcie (zakładając, że masz włączoną opcję Pokaż wszystkie pliki w Eksploratorze rozwiązań )

Należy pamiętać, że wymaga to również włączenia opcji AutoToolboxPopulate . Jak sugeruje odpowiedź @DaveF.

Alternatywne rozwiązanie: Nie jestem pewien, czy to zadziała, i nie mogłem tego wypróbować, ponieważ już rozwiązałem mój problem, ale jeśli odznaczyłeś kontrolę użytkownika w oknie dialogowym Wybierz elementy ... , naciśnij OK, a następnie otworzyłem ją z powrotem i sprawdził kontrolę użytkownika. To też może zadziałać.

MoMo
źródło
3

Jest kilka sposobów.

  1. W oryginalnym projekcie wybierz opcję Plik | Eksportuj szablon, a
    następnie wybierz opcję ItemTemplate i postępuj zgodnie z instrukcjami kreatora.

  2. Przenieś UserControl do oddzielnej ClassLibrary (i napraw przestrzenie nazw itp.).
    Dodaj odniesienie do biblioteki klas z projektów, które tego potrzebują. Nie przejmuj się GAC ani czymkolwiek, tylko plikiem DLL.

Nie radziłbym umieszczać UserControl w zwykłym ToolBoxie, ale da się to zrobić. Zobacz odpowiedź od @Arseny

Henk Holterman
źródło
Wydaje się, że to lepsze podejście. Jedyną wadą jest to, że nie możesz edytować kontrolki wizualnie (a przynajmniej nie znalazłem, jak).
Sebastian
Nieważne, dodałem szablon jako element i projektant pokazuje.
Sebastian
Całkowicie się zgadzam i zdecydowanie odradzam tworzenie linków do DLL, jeśli projekt zawierający UserControl znajduje się w tym samym rozwiązaniu. I będzie działać z biblioteką DLL, tj. UserControl w projekcie biblioteki pojawi się w każdym projekcie WinForms, który odwołuje się do biblioteki (oczywiście po przebudowie ;-)).
Xan-Kun Clark-Davis
2

W moim przypadku nie widziałem żadnych elementów sterujących w projekcie. Dopiero po kliknięciu prawym przyciskiem myszy ToolBox i wybraniu „Pokaż wszystko” widziałem je, ale były one wyłączone ...

Zmiana typu projektu z aplikacji Windows na ClassLibrary rozwiązała problem.

efraim
źródło
1

Podstawowa kwestia, jeśli używasz generycznych w swojej podstawowej kontroli. Jeśli tak:

powiedzmy, że mamy kontrolę:

public class MyComboDropDown : ComboDropDownComon<MyType>
{
    public MyComboDropDown() { }
}

MyComboDropDown nie pozwoli na otwarcie na nim projektanta i nie będzie wyświetlane w Toolbox. Czemu? Ponieważ formant podstawowy nie jest już skompilowany - gdy MyComboDropDown jest zgodny. Możesz zmodyfikować to:

public class MyComboDropDown : MyComboDropDownBase
{
    public MyComboDropDown() { }
}

public class MyComboDropDownBase : ComboDropDownComon<MyType>
{

}

Następnie po przebudowie i zresetowaniu zestawu narzędzi powinien być w stanie zobaczyć MyComboDropDown w projektancie, a także w Toolbox

Andrzeja
źródło
0

Rekompilacja załatwiła mi sprawę!

Lex van Buiten
źródło