So fügen Sie ein UserControl in die Visual Studio-ToolBox ein

93

Ich habe in meinem Projekt eine Benutzersteuerung erstellt. Nach dem Erstellen des Projekts muss ich es in meine Toolbox einfügen und als gemeinsames Steuerelement verwenden. aber ich kann nicht. Das UserControlbefindet sich in meinem Projekt-Namespace, und ich habe es Choose Itemim Kontextmenü versucht , aber ich habe keine Möglichkeit gefunden, es hinzuzufügen.

Saeed
quelle

Antworten:

114

Ich gehe davon aus, dass Sie VS2010 verwenden (so haben Sie die Frage markiert). Ich hatte Probleme, sie wie in VS2008 / 2005 automatisch zur Toolbox hinzuzufügen. Es gibt tatsächlich eine Option, um das automatische Ausfüllen der Toolbox zu stoppen!

Gehen Sie zu Extras> Optionen> Windows Forms Designer> Allgemein

Am Ende der Liste finden Sie Toolbox> AutoToolboxPopulate, die bei einer Neuinstallation standardmäßig False ist. Setzen Sie es auf true und erstellen Sie Ihre Lösung neu.

Hey Presto, die Benutzersteuerelemente in Ihrer Lösung sollten automatisch zur Toolbox hinzugefügt werden. Möglicherweise müssen Sie die Lösung auch neu laden.

DaveF
quelle
31
Das Schlüsselwort hier für mich war "Wiederaufbau" ... hatte das nicht versucht, d'oh! Das alleine zu machen hat das für mich geregelt.
Danny Beckett
2
Und ich musste die Lösung nach dem Wiederaufbau wieder öffnen
Jim Lahman
1
In VS2012 haben sie jetzt den Hinweis "Die aktuelle Lösung muss erneut geöffnet werden, damit dies wirksam wird" zum Optionsdialog hinzugefügt.
Carlos P
2
@AnatoliiGumennyi Sie müssen die Anweisungen von @ Arseny befolgen, wenn sich das UserControlaußerhalb des aktuellen Projekts befindet.
Attacktive
2
Hinweis: In VS2013 ist die Einstellung Toolbox> AutoToolboxPopulate bei Neuinstallation standardmäßig True.
Curmudgeon
35

Klicken Sie mit der rechten Maustaste auf die Symbolleiste und dann im Kontextmenü auf "Element auswählen". Ein Dialogfeld mit registrierten Komponenten wird angezeigt. Klicken Sie in diesem Dialogfeld auf "Durchsuchen", um Ihre Baugruppe mit der Benutzersteuerung auszuwählen, die Sie verwenden möchten.

PS. Diese Baugruppe sollte vorher registriert werden.

Arseny
quelle
17
Können Sie "vorher registriert" erklären? Ich denke nicht, dass das erforderlich ist.
Henk Holterman
25

Ich habe festgestellt, dass das Benutzersteuerelement einen parameterlosen Konstruktor haben muss, sonst wird es nicht in der Liste angezeigt. Zumindest stimmte das im Vergleich zu 2005.

Scott
quelle
8
Auch in vs2012.
Colbybhearn
8
Auch in vs2013.
Connor McGuinness
6
Auch in vs2015?
Serdar
5
Ja auch in vs2015
JRB
5
Fügen Sie vs2017 zur Liste hinzu
Ryan
14

Verwenden von VS 2010:

Angenommen, Sie haben ein Windows.Forms-Projekt. Sie fügen dem Projekt ein UserControl (z. B. MyControl) hinzu und entwerfen alles. Jetzt möchten Sie es Ihrer Toolbox hinzufügen.

Sobald das Projekt einmal erfolgreich erstellt wurde, wird es in Ihren Framework-Komponenten angezeigt. Klicken Sie mit der rechten Maustaste auf die Toolbox, um das Kontextmenü aufzurufen, wählen Sie "Elemente auswählen ..." und navigieren Sie auf der Registerkarte ".NET Framework-Komponenten" zum Namen Ihres Steuerelements (MyControl).

Vorteil gegenüber der Verwendung von DLLs: Sie können die Steuerelemente im selben Projekt wie Ihr Formular bearbeiten, und das Formular wird mit den neuen Steuerelementen erstellt. Die Steuerung ist jedoch nur für dieses Projekt verfügbar.

Hinweis: Wenn das Steuerelement Erstellungsfehler aufweist, beheben Sie diese, bevor Sie mit den enthaltenen Formularen fortfahren, oder der Designer hat einen Herzinfarkt.

Nick
quelle
1
Es kann auch für andere Projekte verfügbar sein, wenn Sie die EXE-Datei in die Toolbox importieren.
Sebastian
1
Jede Antwort mit "oder der Designer hat einen Herzinfarkt" bekommt meine Stimme!
Joel
Ich habe das Gleiche getan und es ist alles gut, aber wenn ich den Code in ein anderes Projekt verschoben, eine DLL erstellt und auf die DLL-Datei verwiesen habe, wird das benutzerdefinierte Steuerelement nicht angezeigt.
Fandi Susanto
6

Ich hatte viele Benutzersteuerelemente, aber eines wollte nicht in der Toolbox angezeigt werden , obwohl ich die Lösung neu erstellt habe und sie im Dialogfeld Elemente auswählen ... überprüft wurde .

Lösung:

  1. Von Mappen - Explorer I Rechtsklick auf das Benutzersteuerdatei anstößigen und ausgewählt Ausschließen von Projekt
  2. Erstellen Sie die Lösung neu
  3. Klicken Sie mit der rechten Maustaste auf das Benutzersteuerelement und wählen Sie In Projekt einschließen (vorausgesetzt, Sie haben im Projektmappen- Explorer die Option Alle Dateien anzeigen aktiviert ).

Beachten Sie, dass hierfür auch die Option AutoToolboxPopulate aktiviert sein muss. Wie die Antwort von @DaveF andeutet.

Alternative Lösung: Ich bin nicht sicher, ob dies funktioniert, und ich konnte es nicht versuchen, da ich mein Problem bereits behoben habe. Wenn Sie jedoch das Benutzersteuerelement im Dialogfeld Elemente auswählen ... deaktiviert haben, klicken Sie auf OK und öffnen Sie es erneut und überprüfte die Benutzersteuerung. Das könnte auch funktionieren.

MoMo
quelle
3

Es gibt verschiedene Möglichkeiten.

  1. Wählen Sie in Ihrem ursprünglichen Projekt Datei | Vorlage
    exportieren , wählen Sie dann ItemTemplate und folgen Sie dem Assistenten.

  2. Verschieben Sie Ihr UserControl in eine separate ClassLibrary (und korrigieren Sie Namespaces usw.).
    Fügen Sie der Klassenbibliothek eine Referenz aus Projekten hinzu, die sie benötigen. Kümmere dich nicht um den GAC oder irgendetwas anderes, sondern nur um die DLL-Datei.

Ich würde nicht empfehlen, ein UserControl in die normale ToolBox zu setzen, aber es kann getan werden. Siehe die Antwort von @Arseny

Henk Holterman
quelle
Dies scheint der bessere Ansatz zu sein. Der einzige Nachteil ist, dass Sie das Steuerelement nicht visuell bearbeiten können (oder zumindest nicht gefunden habe, wie).
Sebastian
Trotzdem habe ich die Vorlage als Element hinzugefügt und der Designer zeigt sie an.
Sebastian
Ich stimme voll und ganz zu und würde auch dringend davon abraten, eine Verknüpfung zu einer DLL herzustellen, wenn sich das Projekt, das UserControl enthält, in derselben Lösung befindet. Und es funktioniert mit einer DLL, dh das UserControl im Bibliotheksprojekt wird in jedem WinForms-Projekt angezeigt, das auf die Bibliothek verweist (natürlich nach einer Neuerstellung ;-)).
Xan-Kun Clark-Davis
2

In meinem Fall konnte ich keine der Steuerelemente im Projekt sehen. Erst als ich mit der rechten Maustaste auf die ToolBox klickte und "Alle anzeigen" auswählte, sah ich sie, aber sie waren deaktiviert ...

Durch Ändern des Projekttyps von der Windows-Anwendung in ClassLibrary wurde das Problem behoben.

Ephraim
quelle
1

Grundlegende Frage, wenn Sie Generika in Ihrer Basissteuerung verwenden. Falls ja:

Nehmen wir an, wir haben die Kontrolle:

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

MyComboDropDown erlaubt es nicht, Designer darauf zu öffnen und wird nicht in der Toolbox angezeigt. Warum? Weil das Basissteuerelement noch nicht kompiliert ist - wenn MyComboDropDown eingehalten wird. Sie können dies ändern:

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

public class MyComboDropDownBase : ComboDropDownComon<MyType>
{

}

Nach dem Neuerstellen und Zurücksetzen der Toolbox sollte MyComboDropDown sowohl im Designer als auch in der Toolbox angezeigt werden können

Andrzej
quelle
0

Das Neukompilieren hat den Trick für mich getan!

Lex van Buiten
quelle