[DEVEXPRESS/WINFORM] DiagramControl 클래스 : CustomGetEditableItemProperties 이벤트를 사용해 속성 패널에 파생 도형 속성 추가하기
DevExpress/WinForm 2020. 6. 7. 21:10728x90
반응형
728x170
▶ 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
반응형
그리드형(광고전용)
댓글을 달아 주세요