2010-03-16 3 views
0

아주 간단한 컨트롤을 작성했습니다. C#을 Visual Studio 2008. 그 출력되어야하고 dll입니다. 나는 그것을 사용하고자하는 프로젝트 내의 dll에 대한 참조를 추가했다. 컨트롤을 작성하는 방법에 대한 msdn 기사는 '참조/프로젝트 추가'목록에 나타나야한다고 말합니다.이 목록은 '찾아보기'탭에서 간단히 탐색 한 다음/bin 폴더로 이동하여 추가됩니다. 그 방법으로 참조하십시오. 도구 상자로 드래그했지만 '텍스트 : xhair_tool'로 표시되고 양식에 추가하려고하면 모양이 변경되지 않으므로 잘못 했습니까? 그것은 'Windows 폼 컨트롤'프로젝트로 만들어졌습니다. 아래와 같이 배열을 반환하는 'Target'메서드를 내 보내야합니다.사용자 지정 Windows Forms 컨트롤이 도구 목록에 표시되지 않고 텍스트로 표시되는 기능을 내 보냅니다.

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.

답변

0

이 작동하지 않을 수있는 부분 "내 도구 상자에 이상 끌어". 도구 상자를 마우스 오른쪽 단추로 클릭하고 "항목 선택"을 선택하고 찾아보기 탭을 사용하십시오.

UserControl을 DLL에 추가하는 대신 프로젝트에 추가하는 것이 훨씬 낫습니다. 그렇게하면 컴파일 한 후 자동으로 도구 상자 맨 위에 나타납니다.

+1

또는 동일한 솔루션의 다른 프로젝트에 넣는 경우. – SLaks

+0

@SLaks, 자주 자주 사용하는 많은 기능과 컨트롤이있는 "유틸리티"라이브러리에서이 작업을 수행합니다. 또한 디버깅이 필요할 때 도움이됩니다. 오류가 발생하면 컨트롤 내부에서 문제가 발생합니다. –

+0

@Scott : 무슨 소리 야? – SLaks

0

마우스 오른쪽 단추로 클릭하고 항목 선택을 클릭, 도구 상자, 그리고 컨트롤을 추가 할 수 있습니다. 컨트롤

몇 가지 권장 사항 :

  • TargetPoint 아닌 int[]해야한다.
  • UserControl은 다른 컨트롤을 포함하는 컨트롤 용으로 설계되었습니다. 너의 것이 아니기 때문에 Control에서 상속해야한다. here을 참조하십시오.
  • 다음과 같은 스타일을 설정해야합니다

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

어디에서 스타일을 설정합니까? – flavour404

+0

생성자에서. – SLaks

+0

그래, 각 움직일 때 배경을 다시 칠하지 않고 배경이 설정되어있어 이상하고 성가시다. – flavour404

관련 문제