工具箱

时间:2016-11-24 01:19:37

标签: c# .net winforms

背景:使用Visual Studio 2015的C#WinForms程序。

我的项目中有一个User Control类。我的用户控件类称为'FocusControl'。我的项目包含默认的“Form1”。用户控件未自动填充到我的工具箱中。

我的研究和解决方案的历史:

  1. 设置自动填充:
    • 自动填充已开启,我已关闭并重新打开解决方案和程序。
  2. 重建解决方案
    • 做了很多次。我也试过清理和建造。
  3. 检查用户控件的命名空间:
    • UserControl和表单以及项目的名称空间相同。
  4. 进入工具箱并右键点击“选择项目...”
    • 我不是要添加DLL,也不想创建DLL。我想在我的项目中对UserControl进行设计控制。
    • 注意:当我使用与UserControl相同的代码创建一个新的“Windows窗体控件库”时,我可以构建它来创建DLL。使用此DLL,我可以成功将UserControl添加到我的工具箱中。但同样,我不希望这样做。
  5. 我尝试通过“添加用户控件...”通过项目添加新的用户控件,只需一个按钮就可以简化UserControl。那也没出现。
  6. 我找到了更激进的解决方案:

    1. 将[ToolboxItem(true)]添加到UserControl。

      • 试了一下,没用。
    2. 从App Data中删除旧的工具箱文件,因为它们可能会损坏: 请参见此处:https://weblogs.asp.net/javiervillarreal/visual-studio-not-showing-properly-the-toolbox-items

      • 试了一下,没用。
    3. 我不知道如何搜索Google以解决此问题。

      研究网站:

      • 最相关:Can I use a UserControl from the same project without making a DLL?
      • Link3:http:// www。 vbforums。 COM / showthread.php?660017-定制控件 - 未示出 - 上 - 在-工具箱
      • Link4:https:// social.msdn。微软。 COM /论坛/ EN-US / 887c0adc-0c26-4789-b563-46d294177eb6 /着,看到定制控制功能于工具箱?论坛= csharpide
      • 还有其他几十个人。以上三个是最相关的,没有帮助。

      修改添加代码:

      用户控制 FocusControl.cs

      namespace ProjectRaven
      {
          [ToolboxItem(true)]
      
          public partial class FocusControl : UserControl
          {
              private const NumberStyles StyleDouble = NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands | NumberStyles.AllowLeadingSign;
      
              private ThermalCamera _camera;
              public FocusControl()
              {
                  InitializeComponent();
              }
      

      用户控件设计器 FocusControl.designer.cs

      namespace ProjectRaven
      {
          partial class FocusControl
          {
              /// <summary> 
              /// Required designer variable.
              /// </summary>
              private System.ComponentModel.IContainer components = null;
      
              /// <summary> 
              /// Clean up any resources being used.
              /// </summary>
              /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
              protected override void Dispose(bool disposing)
              {
                  if (disposing && (components != null))
                  {
                      components.Dispose();
                  }
                  base.Dispose(disposing);
              }
      
              #region Component Designer generated code
      
              /// <summary> 
              /// Required method for Designer support - do not modify 
              /// the contents of this method with the code editor.
              /// </summary>
              private void InitializeComponent()
              {
      

      表格 Form1.cs的

      namespace ProjectRaven
      {
          public partial class Form1 : Form
          {
      
              string ipAddressCamera;
      
              public Form1()
              {
                  InitializeComponent();
      

      表单设计器 Form1.Designer.cs

      namespace ProjectRaven
      {
          partial class Form1
          {
              /// <summary>
              /// Required designer variable.
              /// </summary>
              private System.ComponentModel.IContainer components = null;
      
              /// <summary>
              /// Clean up any resources being used.
              /// </summary>
              /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
              protected override void Dispose(bool disposing)
              {
                  if (disposing && (components != null))
                  {
                      components.Dispose();
                  }
                  base.Dispose(disposing);
              }
      
              #region Windows Form Designer generated code
      
              /// <summary>
              /// Required method for Designer support - do not modify
              /// the contents of this method with the code editor.
              /// </summary>
              private void InitializeComponent()
              {
      

4 个答案:

答案 0 :(得分:2)

过去,一些列出的解决方案帮助了我,但他们今天不会(通过第三方儿童控制课)。但我设法通过首先从代码中使用它来将普通的UserControl继承回到工具箱,如下所示:

  1. 创建新的Windows窗体
  2. 在该Form的构造函数中初始化“hidden”CustomUserControl

    CustomUserControl con = new CustomUserControl();
    Controls.Add被(CON);
    con.Dock = DockStyle.Fill;

  3. 重建解决方案(我开始一次)

  4. 请参阅工具箱中的CustomUserControl
  5. 希望它有所帮助。

答案 1 :(得分:0)

您可以将此用户控件放入其自己的项目中并将其作为DLL输出。然后从您的项目中引用此dll。

答案 2 :(得分:0)

找不到修复程序。

我开始了一个新项目并首先复制了用户控件并构建了解决方案。之后我能够在ProjectRaven Components&#39;下看到FocusControl。在我的工具箱的顶部。我只是将控件和代码从旧项目复制/粘贴回新项目。它似乎工作。

如果使用新项目名称创建新项目,请记住更改名称空间。

答案 3 :(得分:0)

确保您的用户控件为 Public ,并且在设计器生成的代码和您的代码背后,都将其声明为“ Public Partial MyControl类”