0

배경 : 저는 데스크톱 응용 프로그램에서 약간의 수정을 가해서 스킬을 확장하려는 웹 개발자입니다. 이것은 단지 재미를위한 것입니다..NET을 사용하고 미리 정의 된 도형을 드래그 앤 드롭 할 수 있습니다.

최소한의 Visio 인터페이스를 구현하려고합니다.

학교에서 나는 약간의 .NET 작업을 수행 했으므로 Winforms 및 GDI에 익숙합니다. 나는 화면을 아주 쉽게 그릴 수 있고 쓸 수 있음을 안다.

지금 제가 찾고있는 것은 내 사용자가 캔버스에 "도형"을 추가 할 수있는 방법입니다. Visio가 flowcharts 양식을 사용하여 수행하는 작업을 생각하고 원하는 모양을 선택하고 놓고 조정할 수 있습니다 (너비, 높이 등).

나는 이것을 직사각형과 같은 단순한 GDI 모양으로 처리 할 수 ​​있지만, 모든 종류의 도형을 디자인 할 때 무엇을 찾느냐에 대해 분실했다.

내가 생각할 수있는 가장 가까운 예는 데이터 입력을위한 평행 사변형을 캔버스에 놓고 필요에 따라 조정할 수있는 Visio입니다.

내가 최소한의 성공으로 지금까지에 대한 검토 한 무엇 포함

  • 사용자 정의 모양;
  • 사용자 지정 컨트롤;
  • 런타임에 양식 디자이너 사용 가능;
  • 벡터 기반 모양.

나는 무엇을 찾고 있어야합니까?

+1

이렇게하려면 Winforms로부터 도움을 얻을 수 없습니다. 컨트롤은 창이며 직사각형입니다. 컨트롤을 선으로 연결하는 간단한 방법도 없습니다. 양식의 OnPaint() 메소드에서 e.Graphics를 사용하여 모든 작업을 완료 할 수 있지만 모든 것이 사용자의 코드입니다. WPF는 훨씬 더 유용 할 수 있습니다. 창을 사용하지 않습니다. Shape 클래스는 UIElement에서 파생됩니다. –

답변

1

가장 좋은 방법은 사용자 컨트롤을 사용하는 것입니다. Shape라는 기본 사용자 정의 컨트롤을 만듭니다. 그런 다음 원하는 각 도형 (예 : 선 모양)에 대해 Shape에서 파생 된 LineShape라는 클래스를 만듭니다. 또한 IShape라는 인터페이스를 만들 수도 있습니다. 각 모양 클래스가이 인터페이스를 구현하도록하십시오. 인터페이스에는 모든 모양에 필요한 메서드가 포함되어야합니다. 예를 들어 사용자가 드래그하여 모양의 크기를 조정할 수있는 끝점을 정의하는 EndPoints()라는 인터페이스에 메서드를 추가하려고합니다. 각 도형은 기본 사용자 컨트롤에서 파생되므로 드래그 앤 드롭 기능을 이미 갖게됩니다.

각 도형에서 페인트 방법으로 도형을 그릴 수 있습니다. 페인트 메소드에서 Graphics 객체에 대한 핸들을 가져올 수 있으며 그리기 선, 원 또는 폴리곤과 같은 원시적 인 작업을 수행 할 수 있습니다.

"캔버스"는 사용자 정의 컨트롤이어야합니다. 당신은 List<IShape> 목록을 캔버스 위로 드래그 앤 드롭 된 각 셰이프 컨트롤을 유지하기 위해 정의하고 싶을 것입니다.

드래그 앤 드롭하려면 Shape 컨트롤에서이 기능을 사용하기 만하면 다른 모든 모양에서 상속됩니다. 캔버스 위로 드래그하는 동안 드래그되는 데이터의 유형이 IShape인지 확인하고 DoDragDrop()을 호출하면 사용자가 캔버스에 도형을 드롭 할 수 있습니다.

도움이 필요하면 InterfacesUser Controls을 읽어보십시오.

인터페이스에 프로그래밍을 시도하고 충분히 잘하면 프로그램 지원 플러그인을 만들어 다른 개발자가 응용 프로그램과 겉으로보기에 통합 된 사용자 지정 셰이프를 작성할 수도 있습니다.

+0

감사합니다, 다음 주 휴가가 더 재미있을 것입니다. 적어도 재미있는 작은 자기 학습 실험을 찾을 수있는 단서가 있습니다.) – jfrobishow