Cách đưa UserControl vào Visual Studio toolBox


93

Tôi đã tạo điều khiển người dùng trong dự án của mình và sau khi xây dựng dự án, tôi cần đặt nó vào hộp công cụ của mình và sử dụng nó như một điều khiển chung. nhưng tôi không thể. những UserControllà trong không gian tên dự án của tôi, và tôi đã cố gắng Choose Itemtrong menu chuột phải, nhưng tôi đã không tìm thấy một cách để thêm nó.

Câu trả lời:


114

Tôi giả sử bạn đang sử dụng VS2010 (đó là những gì bạn đã gắn thẻ câu hỏi là) Tôi đã gặp sự cố khi tự động thêm chúng vào hộp công cụ như trong VS2008 / 2005. Thực ra có một tùy chọn để ngăn hộp công cụ tự động điền!

Đi tới Công cụ> Tùy chọn> Windows Forms Designer> Chung

Ở cuối danh sách, bạn sẽ tìm thấy Hộp công cụ> Hộp công cụ tự động Điều chỉnh mà trên bản cài đặt mới sẽ mặc định là Sai. Đặt nó đúng và sau đó xây dựng lại giải pháp của bạn.

Này trước khi họ kiểm soát người dùng trong giải pháp của bạn sẽ được tự động thêm vào hộp công cụ. Bạn cũng có thể phải tải lại giải pháp.


31
Từ khóa ở đây đối với tôi là "xây dựng lại" ... đã không thử điều đó, d'oh! Làm điều đó một mình đã sắp xếp điều này cho tôi.
Danny Beckett,

2
Và, tôi đã phải mở lại các giải pháp sau khi xây dựng lại
Jim Lahman

1
Trong VS2012, họ đã thêm gợi ý 'Giải pháp hiện tại phải được mở lại để điều này có hiệu lực' vào hộp thoại tùy chọn.
Carlos P

2
@AnatoliiGumennyi Bạn sẽ phải làm theo hướng dẫn của @ Arseny nếu UserControlnó nằm ngoài dự án hiện tại.
Attacktive

2
Lưu ý: Có vẻ như trong VS2013, cài đặt Toolbox> AutoToolboxPopulate hiện được đặt mặc định thành True khi cài đặt mới.
Curmudgeon

35

Nhấp chuột phải vào thanh công cụ sau đó nhấp vào "chọn mục" trong menu ngữ cảnh. Một hộp thoại với các thành phần đã đăng ký bật lên. trong hộp thoại này nhấp vào "Duyệt qua" để chọn lắp ráp của bạn với điều khiển người dùng mà bạn muốn sử dụng.

Tái bút. Lắp ráp này nên được đăng ký trước.


17
Bạn có thể giải thích 'đã đăng ký trước' không? Tôi không nghĩ rằng điều đó là bắt buộc.
Henk Holterman

25

Tôi thấy rằng điều khiển người dùng phải có một hàm tạo không tham số nếu không nó sẽ không hiển thị trong danh sách. ít nhất điều đó đã đúng trong vs2005.


8
Cũng trong vs2012.
colbybhearn

8
Cũng trong vs2013.
Connor McGuinness

6
Còn trong vs2015?
serdar

5
Có cũng trong so với năm 2015
JRB

5
Thêm vs2017 vào danh sách
Ryan

14

Sử dụng VS 2010:

Giả sử bạn có một dự án Windows.Forms. Bạn thêm một UserControl (ví dụ MyControl) vào dự án và thiết kế tất cả. Bây giờ bạn muốn thêm nó vào hộp công cụ của mình.

Ngay sau khi dự án được xây dựng thành công một lần, nó sẽ xuất hiện trong Thành phần khung của bạn. Nhấp chuột phải vào Hộp công cụ để nhận menu ngữ cảnh, chọn "Chọn Mục ..." và duyệt đến tên điều khiển của bạn (MyControl) trong tab "Thành phần .NET Framework".

Lợi thế hơn so với việc sử dụng dlls: bạn có thể chỉnh sửa các điều khiển trong cùng một dự án với biểu mẫu của bạn và biểu mẫu sẽ xây dựng với các điều khiển mới. Tuy nhiên, kiểm soát sẽ chỉ có sẵn cho dự án này.

Lưu ý: Nếu điều khiển có lỗi bản dựng, hãy giải quyết chúng trước khi chuyển sang các biểu mẫu có chứa, nếu không nhà thiết kế bị đau tim.


1
Nó cũng có thể khả dụng cho các dự án khác nếu bạn nhập .exe vào hộp công cụ.
Sebastian

1
Bất kỳ câu trả lời nào có chứa "hoặc nhà thiết kế bị đau tim" sẽ nhận được phiếu bầu của tôi!
Joel

Tôi đã làm điều tương tự và tất cả đều tốt, nhưng khi tôi chuyển mã vào một dự án khác, tạo một dll và tham chiếu tệp dll, điều khiển tùy chỉnh không hiển thị.
Fandi Susanto

6

Tôi có nhiều điều khiển của người dùng nhưng một điều khiển từ chối hiển thị trong Hộp công cụ , mặc dù tôi đã tạo lại giải pháp và nó đã được chọn trong hộp thoại Chọn mục ....

Giải pháp:

  1. Từ giải pháp Explorer, tôi đã nhấp chuột phải vào tệp điều khiển người dùng vi phạm và chọn Loại trừ khỏi dự án
  2. Xây dựng lại giải pháp
  3. Nhấp chuột phải vào điều khiển người dùng và chọn Bao gồm trong Dự án (giả sử bạn đã bật Hiển thị Tất cả Tệp trong Trình khám phá Giải pháp )

Lưu ý rằng điều này cũng yêu cầu bạn phải bật tùy chọn AutoToolboxPopulate . Như câu trả lời @DaveF gợi ý.

Giải pháp thay thế: Tôi không chắc cách này có hiệu quả không và tôi không thể thử vì tôi đã giải quyết xong sự cố của mình, nhưng nếu bạn bỏ chọn kiểm soát người dùng từ hộp thoại Chọn mục ... , hãy nhấn OK, sau đó mở lại và kiểm tra sự kiểm soát của người dùng. Điều đó cũng có thể hoạt động.


3

Có một vài cách khác nhau.

  1. Trong Dự án ban đầu của bạn, chọn Tệp | Xuất mẫu
    Sau đó chọn ItemTemplate và làm theo trình hướng dẫn.

  2. Di chuyển UserControl của bạn sang một ClassLibrary riêng biệt (và sửa không gian tên, v.v.).
    Thêm một tham chiếu vào thư viện lớp từ các Dự án cần nó. Đừng bận tâm với GAC hay bất cứ thứ gì, chỉ cần tệp DLL.

Tôi không khuyên bạn nên đặt UserControl trong ToolBox bình thường, nhưng nó có thể được thực hiện. Xem câu trả lời từ @Arseny


Đây có vẻ là cách tiếp cận tốt hơn. Hạn chế duy nhất là bạn không thể chỉnh sửa điều khiển một cách trực quan (hoặc ít nhất là tôi không tìm thấy cách thực hiện).
Sebastian

Đừng bận tâm, tôi đã thêm mẫu làm phần tử và trình thiết kế đang hiển thị.
Sebastian

Tôi hoàn toàn đồng ý và cũng sẽ khuyên bạn không nên liên kết với DLL nếu dự án có UserControl trong cùng một giải pháp. Và nó sẽ hoạt động với một DLL, tức là UserControl trong Dự án Thư viện sẽ hiển thị trong bất kỳ dự án WinForms nào tham chiếu đến thư viện (tất nhiên là sau khi xây dựng lại ;-)).
Xan-Kun Clark-Davis

2

Trong trường hợp của tôi, tôi không thể thấy bất kỳ điều khiển nào trong dự án. Chỉ khi nhấp chuột phải vào toolBox và chọn "Show All", tôi mới thấy chúng, nhưng chúng đã bị vô hiệu hóa ...

Việc thay đổi loại Dự án từ ứng dụng Windows sang ClassLibrary đã thực hiện sửa lỗi.


1

Kiệt sức cơ bản nếu bạn đang sử dụng generic trong điều khiển cơ sở của mình. Nếu có:

giả sử chúng tôi có quyền kiểm soát:

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

MyComboDropDown sẽ không cho phép mở trình thiết kế trên đó và sẽ không được hiển thị trong Hộp công cụ. Tại sao? Vì kiểm soát cơ sở chưa được biên dịch - khi MyComboDropDown được tuân thủ. Bạn có thể sửa đổi điều này:

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

public class MyComboDropDownBase : ComboDropDownComon<MyType>
{

}

Sau khi xây dựng lại và đặt lại hộp công cụ, nó sẽ có thể thấy MyComboDropDown trong trình thiết kế và cả trong Hộp công cụ



Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.