첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

TestProject.zip
다운로드

▶ CustomDiagramShape.cs

using DevExpress.Utils.Serializing;
using DevExpress.XtraDiagram;

namespace TestProject
{
    /// <summary>
    /// 커스텀 다이어그램 도형
    /// </summary>
    public class CustomDiagramShape : DiagramShape
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Property
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 데이터베이스 객체 ID - DatabaseObjectID

        /// <summary>
        /// 데이터베이스 객체 ID
        /// </summary>
        [XtraSerializableProperty]
        public int DatabaseObjectID { get; set; }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Static

        #region 생성자 - CustomDiagramShape()

        /// <summary>
        /// 생성자
        /// </summary>
        static CustomDiagramShape()
        {
            DiagramControl.ItemTypeRegistrator.Register(typeof(CustomDiagramShape));
        }

        #endregion
    }
}

 

728x90

 

▶ MainForm.cs

using System.ComponentModel;
using System.Drawing;

using DevExpress.Diagram.Core;
using DevExpress.Utils;
using DevExpress.XtraEditors;
using DevExpress.XtraDiagram;

namespace TestProject
{
    /// <summary>
    /// 메인 폼
    /// </summary>
    public partial class MainForm : XtraForm
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - MainForm()

        /// <summary>
        /// 생성자
        /// </summary>
        public MainForm()
        {
            InitializeComponent();

            DiagramStencil stencil = new DiagramStencil("CustomStencil", "Custom Shapes");

            FactoryItemTool itemTool = new FactoryItemTool
            (
                "CustomShape",
                () => "Custom Shape",
                diagram =>
                {
                    CustomDiagramShape customShape = new CustomDiagramShape()
                    {
                        Width  = 100,
                        Height = 50
                    };
                    
                    return customShape;
                },
                new System.Windows.Size(100, 50),
                false
            );

            stencil.RegisterTool(itemTool);

            DiagramToolboxRegistrator.RegisterStencil(stencil);

            this.diagramControl.SelectedStencils = new StencilCollection("CustomStencil");

            CustomDiagramShape shape = new CustomDiagramShape();

            shape.Size             = new SizeF(100f, 100f);
            shape.Position         = new PointFloat(250f, 100f);
            shape.Content          = "도형";
            shape.DatabaseObjectID = 10;

            this.diagramControl.Items.Add(shape);

            this.diagramControl.CustomGetEditableItemProperties += diagramControl_CustomGetEditableItemProperties;
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region 다이어그램 컨트롤 편집 가능한 항목 속성 커스텀 구하기 - diagramControl_CustomGetEditableItemProperties(sender, e)

        /// <summary>
        /// 다이어그램 컨트롤 편집 가능한 항목 속성 커스텀 구하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void diagramControl_CustomGetEditableItemProperties(object sender, DiagramCustomGetEditableItemPropertiesEventArgs e)
        {
            if(e.Item is CustomDiagramShape)
            {
                e.Properties.Add(TypeDescriptor.GetProperties(typeof(CustomDiagramShape))["DatabaseObjectID"]);
            }
        }

        #endregion
    }
}
728x90
반응형
그리드형(광고전용)

'DevExpress > WinForm' 카테고리의 다른 글

[DEVEXPRESS/WINFORM] GaugeControl 클래스 : 환형 게이지 동적 생성하기  (0) 2020.06.08
[DEVEXPRESS/WINFORM] ArcScaleRangeBarComponent 클래스 : RoundedCaps 속성을 사용해 범위 막대(Range Bar) 에지 스타일 설정하기  (0) 2020.06.08
[DEVEXPRESS/WINFORM] ArcScaleComponent 클래스 : StartAngle/EndAngle/Value 속성을 사용해 범위 막대(Range Bar)와 현재 값 표시하기  (0) 2020.06.08
[DEVEXPRESS/WINFORM] DiagramControl 클래스 : CustomGetEditableItemProperties 이벤트를 사용해 속성 패널에서 속성 제거하기  (0) 2020.06.07
[DEVEXPRESS/WINFORM] DiagramControl 클래스 : CustomGetEditableItemProperties 이벤트를 사용해 속성 패널에 바인딩 데이터 소스 속성 추가하기  (0) 2020.06.07
[DEVEXPRESS/WINFORM] DiagramControl 클래스 : CustomGetEditableItemProperties 이벤트를 사용해 속성 패널에 속성 추가하기  (0) 2020.06.07
[DEVEXPRESS/WINFORM] DiagramStencil 클래스 : RegisterTool 메소드를 사용해 스텐실에 커스텀 다이어그램 항목 추가하기  (0) 2020.06.07
[DEVEXPRESS/WINFORM] DiagramControl 클래스 : 커스텀 다이어그램 컨테이너 생성하기  (0) 2020.06.07
[DEVEXPRESS/WINFORM] DiagramControl 클래스 : 파생 도형 생성하기/직렬화 하기  (0) 2020.06.07
[DEVEXPRESS/WINFORM] DiagramControl 클래스 : CustomDrawItem 이벤트를 사용해 다이어그램 항목 내 커스텀 아이콘 그리기  (0) 2020.06.07
Posted by icodebroker

댓글을 달아 주세요