วิธีใส่ UserControl ลงใน Visual Studio toolBox


94

ฉันสร้าง usercontrol ในโปรเจ็กต์ของฉันและหลังจากสร้างโปรเจ็กต์ฉันต้องใส่มันลงในกล่องเครื่องมือของฉันและใช้มันเป็นคอนโทรลทั่วไป แต่ฉันทำไม่ได้ UserControlอยู่ใน namespace โครงการของฉันและฉันพยายามChoose Itemในเมนูคลิกขวา แต่ผมไม่ได้หาวิธีที่จะเพิ่มมัน

คำตอบ:


117

ฉันสมมติว่าคุณใช้ VS2010 (นั่นคือสิ่งที่คุณติดแท็กคำถามว่า) ฉันมีปัญหาในการเพิ่มลงในกล่องเครื่องมือโดยอัตโนมัติเหมือนใน VS2008 / 2005 มีตัวเลือกในการหยุดการเติมกล่องเครื่องมืออัตโนมัติ!

ไปที่ Tools> Options> Windows Forms Designer> General

ที่ด้านล่างของรายการคุณจะพบ Toolbox> AutoToolboxPopulate ซึ่งค่าเริ่มต้นของการติดตั้งใหม่เป็น False ตั้งค่าเป็นจริงแล้วสร้างโซลูชันของคุณใหม่

เดี๋ยวก่อนพวกเขาควบคุมผู้ใช้ในโซลูชันของคุณควรเพิ่มลงในกล่องเครื่องมือโดยอัตโนมัติ คุณอาจต้องโหลดโซลูชันใหม่เช่นกัน


32
คำสำคัญสำหรับฉันสำหรับฉันคือ "สร้างใหม่" ... การทำอย่างนั้นคนเดียวจัดเรียงสิ่งนี้สำหรับฉัน
Danny Beckett

2
และฉันต้องเปิดโซลูชันอีกครั้งหลังจากสร้างใหม่
Jim Lahman

1
ใน VS2012 ตอนนี้พวกเขาได้เพิ่มคำใบ้ 'ต้องเปิดโซลูชันปัจจุบันอีกครั้งเพื่อให้สิ่งนี้มีผล' ในกล่องโต้ตอบตัวเลือก
Carlos P

2
@AnatoliiGumennyi คุณจะต้องปฏิบัติตามคำสั่งของ @ Arseny หากUserControlอยู่นอกโครงการปัจจุบัน
โจมตี

2
หมายเหตุ: ดูเหมือนใน VS2013 การตั้งค่า Toolbox> AutoToolboxPopulate จะมีค่าเริ่มต้นเป็น True เมื่อติดตั้งใหม่
Curmudgeon

36

คลิกขวาที่แถบเครื่องมือจากนั้นคลิกที่ "เลือกรายการ" ในเมนูบริบท กล่องโต้ตอบที่มีส่วนประกอบที่ลงทะเบียนจะปรากฏขึ้น ในกล่องโต้ตอบนี้ให้คลิก "เรียกดู" เพื่อเลือกชุดประกอบของคุณด้วยการควบคุมผู้ใช้ที่คุณต้องการใช้

ปล. ควรลงทะเบียนชุดประกอบนี้ก่อน


17
คุณช่วยอธิบาย 'จดทะเบียนก่อน' ได้ไหม? ฉันไม่คิดว่าจำเป็น
Henk Holterman

25

ฉันพบว่าการควบคุมของผู้ใช้ต้องมีตัวสร้างแบบไม่มีพารามิเตอร์มิฉะนั้นจะไม่ปรากฏในรายการ อย่างน้อยนั่นก็เป็นจริงใน vs2005


6
ใน vs2015 ด้วย?
serdar

5
มีด้วยใน vs2015
JRB

5
เพิ่ม vs2017 ในรายการ
Ryan

1
อาจ "เสมอ" เป็นจริงหากเป็นไปตามการสร้างอินสแตนซ์ของคอนโทรลแบบกำหนดเองเช่นวิธีการทำงานของ. NET ไม่สามารถทำได้หากไม่มีตัวสร้างแบบไม่มีพารามิเตอร์
Jonas

14

ใช้ VS 2010:

สมมติว่าคุณมีโครงการ Windows.Forms คุณเพิ่ม UserControl (พูดว่า MyControl) ลงในโปรเจ็กต์และออกแบบทั้งหมด ตอนนี้คุณต้องการเพิ่มลงในกล่องเครื่องมือของคุณ

ทันทีที่สร้างโครงการสำเร็จเพียงครั้งเดียวโครงการจะปรากฏในส่วนประกอบกรอบงานของคุณ คลิกขวาที่กล่องเครื่องมือเพื่อรับเมนูบริบทเลือก "เลือกรายการ ... " และเรียกดูชื่อการควบคุมของคุณ (MyControl) ภายใต้แท็บ ".NET Framework Components"

ข้อได้เปรียบกว่าการใช้ dlls: คุณสามารถแก้ไขตัวควบคุมในโปรเจ็กต์เดียวกับแบบฟอร์มของคุณและฟอร์มจะสร้างด้วยตัวควบคุมใหม่ อย่างไรก็ตามการควบคุมจะใช้ได้กับโปรเจ็กต์นี้เท่านั้น

หมายเหตุ: ถ้าตัวควบคุมมีข้อผิดพลาดในการสร้างให้แก้ไขก่อนที่จะย้ายไปยังแบบฟอร์มที่มีอยู่หรือผู้ออกแบบมีอาการหัวใจวาย


1
นอกจากนี้ยังสามารถใช้ได้กับโครงการอื่น ๆ หากคุณนำเข้า. exe ในกล่องเครื่องมือ
Sebastian

1
คำตอบใด ๆ ที่มี "หรือผู้ออกแบบหัวใจวาย" ได้รับการโหวตของฉัน!
Joel

ฉันทำสิ่งเดียวกันและทุกอย่างก็ดี แต่เมื่อฉันย้ายโค้ดไปยังโปรเจ็กต์อื่นสร้าง dll และอ้างอิงไฟล์ dll ตัวควบคุมแบบกำหนดเองจะไม่ปรากฏขึ้น
Fandi Susanto

6

ฉันมีการควบคุมผู้ใช้หลายคน แต่คนหนึ่งปฏิเสธที่จะแสดงในกล่องเครื่องมือแม้ว่าฉันจะสร้างโซลูชันขึ้นมาใหม่และได้รับการตรวจสอบในกล่องโต้ตอบเลือกรายการ ...

วิธีการแก้:

  1. จากSolution Explorer I คลิกขวาที่ไฟล์ควบคุมผู้ใช้ที่กระทำผิดและเลือกไม่รวมจากโครงการ
  2. สร้างโซลูชันใหม่
  3. คลิกขวาที่ตัวควบคุมผู้ใช้และเลือกรวมในโครงการ (สมมติว่าคุณเปิดใช้งานShow All FilesในSolution Explorer )

หมายเหตุสิ่งนี้ต้องการให้คุณเปิดใช้งานตัวเลือกAutoToolboxPopulate ตามคำตอบของ @DaveF แนะนำ

ทางเลือกอื่น: ฉันไม่แน่ใจว่าวิธีนี้ใช้ได้หรือไม่และฉันไม่สามารถลองได้เนื่องจากฉันได้แก้ไขปัญหาแล้ว แต่ถ้าคุณยกเลิกการเลือกตัวควบคุมผู้ใช้จากกล่องโต้ตอบเลือกรายการ ...ให้กดตกลงจากนั้นเปิดขึ้น และตรวจสอบการควบคุมผู้ใช้ ที่อาจได้ผล


3

มีสองวิธี

  1. ในโปรเจ็กต์เดิมของคุณให้เลือกไฟล์ | ส่งออกเทมเพลต
    จากนั้นเลือก ItemTemplate และทำตามวิซาร์ด

  2. ย้าย UserControl ของคุณไปยัง ClassLibrary แยกต่างหาก (และแก้ไขเนมสเปซ ฯลฯ )
    เพิ่มการอ้างอิงไปยัง classlibrary จาก Projects ที่ต้องการ ไม่ต้องกังวลกับ GAC หรืออะไรเพียงแค่ไฟล์ DLL

ฉันไม่แนะนำให้ใส่ UserControl ใน ToolBox ปกติ แต่สามารถทำได้ ดูคำตอบจาก @Arseny


นี่เป็นแนวทางที่ดีกว่า ข้อเสียเปรียบเพียงประการเดียวคือคุณไม่สามารถแก้ไขการควบคุมด้วยภาพ (หรืออย่างน้อยฉันก็ไม่พบวิธีการ)
Sebastian

ไม่เป็นไรฉันเพิ่มเทมเพลตเป็นองค์ประกอบและนักออกแบบกำลังแสดง
Sebastian

ฉันเห็นด้วยอย่างยิ่งและขอแนะนำอย่างยิ่งให้ไม่เชื่อมโยงไปยัง DLL หากโครงการที่มี UserControl อยู่ในโซลูชันเดียวกัน และจะทำงานร่วมกับ DLL นั่นคือ UserControl ใน Library Project จะปรากฏในโปรเจ็กต์ WinForms ใด ๆ ที่อ้างอิงไลบรารี (หลังจากสร้างใหม่แน่นอน ;-))
Xan-Kun Clark-Davis

2

ในกรณีของฉันฉันไม่เห็นการควบคุมใด ๆ ในโครงการ เฉพาะเมื่อคลิกขวาที่ toolBox และเลือก "แสดงทั้งหมด" ฉันเห็น แต่พวกเขาถูกปิดใช้งาน ...

การเปลี่ยนประเภทโครงการจากแอปพลิเคชัน Windows เป็น ClassLibrary ได้ทำการแก้ไข


1

Qustion พื้นฐานหากคุณใช้ generics ในการควบคุมฐานของคุณ ถ้าใช่:

สมมติว่าเรามีการควบคุม:

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

MyComboDropDown จะไม่อนุญาตให้เปิดตัวออกแบบและจะไม่แสดงใน Toolbox ทำไม? เนื่องจากการควบคุมฐานยังไม่ได้รวบรวม - เมื่อปฏิบัติตาม MyComboDropDown คุณสามารถแก้ไขสิ่งนี้:

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

public class MyComboDropDownBase : ComboDropDownComon<MyType>
{

}

หลังจากสร้างใหม่และรีเซ็ตกล่องเครื่องมือควรจะสามารถเห็น MyComboDropDown ในตัวออกแบบและใน Toolbox


0

ปัญหาเกี่ยวกับนักออกแบบของฉันคือปัญหา 32 และ 64 บิต ฉันสามารถเพิ่มตัวควบคุมลงในกล่องเครื่องมือได้หลังจากทำตามคำแนะนำในไม่สามารถเพิ่มตัวควบคุมจากแอสเซมบลี 64 บิตไปยังกล่องเครื่องมือหรือใช้ในนักออกแบบภายในบทความ Visual Studio IDE MS KB


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.