Cara memasukkan UserControl ke dalam kotak alat Visual Studio

94

Saya membuat kontrol pengguna dalam proyek saya, dan setelah membangun proyek, saya harus meletakkannya di kotak peralatan saya, dan menggunakannya sebagai kontrol umum. tapi saya tidak bisa. yang UserControlada di namespace proyek saya, dan saya mencoba Choose Itemdi menu klik kanan, tapi saya tidak menemukan cara untuk menambahkannya.

Saeed
sumber

Jawaban:

116

Saya berasumsi Anda menggunakan VS2010 (itulah yang Anda tandai sebagai pertanyaan). Saya mengalami masalah untuk menambahkannya secara otomatis ke toolbox seperti pada VS2008 / 2005. Sebenarnya ada opsi untuk menghentikan pengisian otomatis kotak alat!

Buka Alat> Opsi> Perancang Formulir Windows> Umum

Di bagian bawah daftar Anda akan menemukan Toolbox> AutoToolboxPopulate yang pada penginstalan baru default ke False. Tetapkan itu benar dan kemudian buat kembali solusi Anda.

Hei presto mereka kontrol pengguna di solusi Anda harus secara otomatis ditambahkan ke kotak alat. Anda mungkin harus memuat ulang solusinya juga.

DaveF
sumber
32
Kata kuncinya di sini bagi saya adalah "membangun kembali" ... belum mencobanya, d'oh! Melakukan itu sendirian menyortir ini untuk saya.
Danny Beckett
2
Dan, saya harus membuka kembali solusinya setelah membangun kembali
Jim Lahman
1
Di VS2012 mereka sekarang telah menambahkan petunjuk 'Solusi saat ini harus dibuka kembali agar ini berlaku' ke dialog opsi.
Carlos P
2
@AnatoliiGumennyi Anda harus mengikuti instruksi @ Arseny jika di UserControlluar proyek saat ini.
Menyerang
2
Catatan: Sepertinya di VS2013, pengaturan Toolbox> AutoToolboxPopulate sekarang default ke True pada pemasangan baru.
Curmudgeon
36

Klik kanan pada toolbar lalu klik "pilih item" di menu konteks. Dialog dengan komponen terdaftar akan muncul. dalam dialog ini klik "Browse" untuk memilih perakitan Anda dengan kontrol pengguna yang ingin Anda gunakan.

PS. Majelis ini harus didaftarkan sebelumnya.

Arseny
sumber
17
Bisakah Anda menjelaskan 'terdaftar sebelumnya'? Saya tidak berpikir itu diperlukan.
Henk Holterman
25

Saya menemukan bahwa kontrol pengguna harus memiliki konstruktor tanpa parameter atau tidak akan muncul dalam daftar. setidaknya itu benar di vs2005.

scott
sumber
8
Juga di vs2012.
colbybhearn
8
Juga di vs2013.
Connor McGuinness
6
Juga di vs2015?
serdar
5
Ya juga di vs2015
JRB
5
Tambahkan vs2017 ke daftar
Ryan
14

Menggunakan VS 2010:

Katakanlah Anda memiliki proyek Windows.Forms. Anda menambahkan UserControl (katakanlah MyControl) ke proyek, dan merancang semuanya. Sekarang Anda ingin menambahkannya ke kotak peralatan Anda.

Segera setelah proyek berhasil dibangun satu kali, itu akan muncul di Komponen Kerangka Anda. Klik kanan Toolbox untuk mendapatkan menu konteks, pilih "Pilih Item ...", dan telusuri nama kontrol Anda (MyControl) di bawah tab ".NET Framework Components".

Keuntungan menggunakan dll: Anda dapat mengedit kontrol dalam proyek yang sama dengan formulir Anda, dan formulir akan dibangun dengan kontrol baru. Namun, kontrol hanya akan tersedia untuk proyek ini.

Catatan: Jika kontrol memiliki kesalahan build, selesaikan sebelum melanjutkan ke formulir yang berisi, atau desainer mengalami serangan jantung.

Nick
sumber
1
Ini juga dapat tersedia untuk proyek lain jika Anda mengimpor .exe di toolbox.
Sebastian
1
Jawaban apa pun yang berisi "atau desainernya mengalami serangan jantung" mendapat suara saya!
Yoel
Saya melakukan hal yang sama dan semuanya baik-baik saja, tetapi ketika saya memindahkan kode ke proyek lain, membuat dll, dan mereferensikan file dll, kontrol khusus tidak muncul.
Fandi Susanto
6

Saya memiliki banyak kontrol pengguna tetapi satu kontrol menolak untuk ditampilkan di Toolbox , meskipun saya membangun kembali solusi dan itu dicentang di dialog Pilih Item ....

Larutan:

  1. Dari Solution Explorer I Mengklik kanan file kontrol pengguna yang melanggar dan memilih Exclude From Project
  2. Bangun kembali solusi tersebut
  3. Klik kanan kontrol pengguna dan pilih Sertakan dalam Proyek (dengan asumsi Anda memiliki Show All Files diaktifkan di Solution Explorer )

Catatan ini juga mengharuskan Anda mengaktifkan opsi AutoToolboxPopulate . Seperti yang disarankan oleh jawaban @DaveF.

Solusi Alternatif: Saya tidak yakin apakah ini berhasil, dan saya tidak dapat mencobanya karena saya sudah menyelesaikan masalah saya, tetapi jika Anda tidak mencentang kontrol pengguna dari dialog Pilih Item ... , tekan OK, lalu buka kembali dan memeriksa kontrol pengguna. Itu mungkin juga berhasil.

MoMo
sumber
3

Ada beberapa cara.

  1. Dalam Proyek asli Anda, pilih File | Ekspor template
    Kemudian pilih ItemTemplate dan ikuti wizard.

  2. Pindahkan UserControl Anda ke ClassLibrary terpisah (dan perbaiki namespace dll).
    Tambahkan referensi ke perpustakaan kelas dari Proyek yang membutuhkannya. Jangan repot-repot dengan GAC atau apapun, hanya file DLL.

Saya tidak akan menyarankan untuk meletakkan UserControl di ToolBox normal, tetapi itu bisa dilakukan. Lihat jawaban dari @Arseny

Henk Holterman
sumber
Ini sepertinya pendekatan yang lebih baik. Satu-satunya kelemahan adalah Anda tidak dapat mengedit kontrol secara visual (atau setidaknya saya tidak menemukan caranya).
Sebastian
Tidak masalah, saya menambahkan template sebagai elemen dan desainernya ditampilkan.
Sebastian
Saya sangat setuju dan juga sangat menyarankan agar tidak menautkan ke DLL jika proyek yang berisi UserControl berada dalam solusi yang sama. Dan itu akan bekerja dengan DLL, yaitu UserControl di Proyek Perpustakaan akan muncul di proyek WinForms manapun yang mereferensikan perpustakaan (setelah membangun kembali, tentu saja ;-)).
Xan-Kun Clark-Davis
2

Dalam kasus saya, saya tidak dapat melihat kontrol apa pun dalam proyek tersebut. Hanya ketika mengklik kanan pada toolBox dan memilih "Show All" saya melihatnya, tetapi mereka dinonaktifkan ...

Mengubah jenis Proyek dari aplikasi Windows ke ClassLibrary membuat perbaikan.

ephraim
sumber
1

Pertanyaan dasar jika Anda menggunakan obat generik di kontrol basis Anda. Jika ya:

katakanlah kita memiliki kendali:

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

MyComboDropDown tidak akan mengizinkan untuk membuka desainer di atasnya dan tidak akan ditampilkan di Toolbox. Mengapa? Karena kontrol dasar belum dikompilasi - ketika MyComboDropDown terpenuhi. Anda dapat mengubah ini:

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

public class MyComboDropDownBase : ComboDropDownComon<MyType>
{

}

Dari pada setelah membangun kembali, dan mengatur ulang kotak alat itu harus dapat melihat MyComboDropDown di desainer dan juga di Toolbox

Andrzej
sumber
0

Kompilasi ulang berhasil bagi saya!

Lex van Buiten
sumber