自定义Windows窗体控件不导出功能,不显示在工具列表中,显示为文本

时间:2010-03-16 01:05:10

标签: c# visual-studio-2008 user-controls

我写了一个非常简单的控件。 C#Visual Studio 2008.它的输出应该是,并且是一个dll。我在项目中添加了对我打算使用它的dll的引用。关于如何编写控件的msdn文章声明它应该出现在“添加引用/项目”列表中,它不会,但我只是在“浏览”选项卡下导航到它,转到/ bin文件夹并添加引用那种方式。我将它拖到我的工具箱中,但它显示为'Text:xhair_tool',当我尝试将其添加到表单时,它不会,所以我做错了什么?它被创建为“Windows窗体控件”项目。它应该导出一个返回数组的'Target'方法,如下所示。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;

namespace xhair_tool
{
public partial class xhair : UserControl
{
    public xhair()
    {
        InitializeComponent();
    }

    private void xhair_Load(object sender, EventArgs e)
    {

    }
    protected override void OnPaint(PaintEventArgs e)
    {
        Graphics g = e.Graphics;
        Pen pen = new Pen(Color.Black, 1);
        SolidBrush redBrush = new SolidBrush(Color.Red);
        g.DrawLine(pen, 8, 0, 8, 7);
        g.DrawLine(pen, 8, 9, 8, 16);
        g.DrawLine(pen, 0, 8, 7, 8);
        g.DrawLine(pen, 9, 8, 16, 8);

        //ControlPaint.DrawReversibleLine(start, end, backColor)
    }
    /// <summary>
    /// Returns the point at the center of the crosshair
    /// </summary>
    /// <returns>int[x,y]</returns>
    public int[] Target
    {
        get
        {
            int[] _xy = new int[2];
            _xy[0] = this.Left + 8;
            _xy[1] = this.Top + 8;
            return _xy;
        }
    }

}

}

谢谢,R。

2 个答案:

答案 0 :(得分:0)

右键单击工具箱,单击“选择项目”,然后添加控件。

控制的一些建议:

  • Target应该是Point,而不是int[]
  • UserControl适用于包含其他控件的控件。既然你没有,你应该继承Control。见here
  • 您应该设置以下样式:

        SetStyle(ControlStyles.AllPaintingInWmPaint
               | ControlStyles.UserPaint
               | ControlStyles.Opaque
               | ControlStyles.OptimizedDoubleBuffer
               | ControlStyles.ResizeRedraw,
                 true);
    

答案 1 :(得分:0)

“将其拖到我的工具箱”部分无法正常工作。右键单击工具箱并选择“选择项目”,使用“浏览”选项卡。

最好只将UserControl添加到项目中,而不是将其自身放入DLL中。执行此操作后,编译后会自动显示在工具箱的顶部。