【问题标题】:.NET VS2005 WinForms: How do i drop a user control onto a form?.NET VS2005 WinForms:如何将用户控件拖放到表单上?
【发布时间】:2010-09-19 00:36:03
【问题描述】:

我已经编写了一个在程序集 dll 中的 UserControl 后代。

如何将控件放到表单上?

namespace StackOverflowExample
{
   public partial class MonthViewCalendar : UserControl
   {
      ...
   }
}

我在 Solution ExplorerReferences 节点下添加了对程序集的引用,但我的 Toolbox 中没有出现新控件>.

如何使控件出现在工具箱中,以便我可以将其拖放到表单上?


更新 1

我尝试在 Visual Studio 选项下构建程序集:

工具-->选项...-->Windows 窗体设计器-->AutoToolboxPopulate =真的

在新解决方案的工具箱中没有出现控件。

注意:我不知何故错误地写了“......那是 not 在程序集 dll 中......”。我不知道我是怎么写出来的,当它专门 在一个程序集 dll 中时。当它们在同一个项目中时,控件会神奇地出现,但现在不是因为它是不同的项目/解决方案。


更新 2:回答

  1. 右键单击工具箱
  2. 选择选择项目...
  3. .NET Framework 组件选项卡
  4. 选择浏览...
  5. 浏览到包含控件的assembly dll文件并选择Open

    注意:程序集中的控件将以静默方式添加到 .NET Framework 组件列表中。

  6. 选中您希望出现在工具箱中的每个控件
  7. 选择确定

【问题讨论】:

    标签: visual-studio winforms assemblies


    【解决方案1】:

    通常,当您构建项目时,您的用户控件将出现在顶部的工具箱中。通常,您会看到一个新窗格,其中包含每个程序集和控件。

    如果这没有发生,您也可以通过右键单击工具箱,选择 Choose Items,然后在 .NET Framework Components 下浏览您的控件来添加控件组装,添加它,然后确保您的控件被选中。

    【讨论】:

      【解决方案2】:

      我注意到,只有当您的项目(包含控件/组件)与解决方案位于同一文件夹中时,vs2005 才会自动将用户控件和组件添加到工具箱中。当此项目在子文件夹中时,vs2005 不会在工具箱中添加控件和组件。

      【讨论】:

        【解决方案3】:

        我偶然发现了一些问题。最后,只需重建和重新引用即可。我更喜欢从 UserControl 继承。它让我的生活更简单;)

        例如,如果您想创建一个“圆角边框”标签,请执行以下操作:

        using System;
        using System.ComponentModel;
        using System.Drawing;
        using System.Drawing.Drawing2D;
        using System.Windows.Forms;
        
        namespace YourUIControls
        {
            [DefaultProperty("TextString")]
            [DefaultEvent("TextClick")]
            public partial class RoundedLabel : UserControl
            {
                 public RoundedLabel()
                 {
                     InitializeComponent();
                 }
                 protected override void OnPaint(PaintEventArgs e)
                 {
                     //Draw your label here…
                 }
             }
        }
        

        编译并添加对输出的引用。您将能够将其拖到工具箱中,然后再拖到设计器中。

        【讨论】:

        • 短语“将其拖到工具箱”的问题是,您必须有一些东西可以从中拖出。
        【解决方案4】:

        您需要构建包含您已创建的控件的项目,并确保为工具箱设置了选项以进行重建。如果你没有改变它的默认值,它应该可以工作;否则,转到 Tools-->Options... 并选择 Windows Forms Designer 组。确保 AutoToolboxPopulate 选项设置为 true

        您不需要ToolboxItemAttribute 即可工作。如果提供程序集与使用程序集位于同一解决方案中,则它应该出现在工具箱中。如果提供的程序集不是解决方案的一部分,您可以通过从工具箱上下文菜单中选择 **Choose items...* 并直接添加程序集来手动将程序集添加到工具箱。如果您希望工具箱自动拾取它们,则需要使用ToolboxItemAttribute

        【讨论】:

        • 他需要 ToolboxAttribute 才能让其他人使用该控件而不必跳过障碍
        • 在我构建解决方案时启用了 Visual Studio 中的该选项。当我在新解决方案中创建新的 WinForms 项目时,该控件不会出现在工具箱中。
        • 对问题的编辑澄清了您希望在新解决方案中使用它。我已经相应地编辑了我的回复。谢谢。
        • 您能否提供有关此“ToolBoxAttribute”的任何文档?我在 MSDN、Google、Stackoverflow 或在线帮助中找不到任何参考资料。
        • 我的错误。我假设尼克的帖子使用了正确的类型名称。该属性实际上是 ToolboxItemAttribute。我已经相应地更新了我的帖子。
        【解决方案5】:

        将 ToolboxAttribute 添加到您的类中。

        【讨论】:

        • 我在 MSDN、本地帮助、stackoverflow 或 google 上找不到有关 ToolboxAttribute 的文档。能否提供命名空间和构造函数/示例用法?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-07
        • 1970-01-01
        • 2018-08-22
        • 1970-01-01
        相关资源
        最近更新 更多