New to Telerik UI for WinForms? Download free 30-day trial

ZOrder

RadDiagram gives you the ability to control the Z-Order of shapes and connections by using their ZIndex property. You can also use RadDiagramCommands in order to increase/decrease ZIndex of the selected RadDiagramItems simultaneously.

Using the ZIndex property

Consider the following code:


RadDiagramShape shape1 = new RadDiagramShape()
{
    Text = "shape1",
    ZIndex = 3,
    ElementShape = new EllipseShape(),
    BackColor = System.Drawing.Color.LightBlue
};
shape1.Position = new Telerik.Windows.Diagrams.Core.Point(100, 10);
radDiagram1.AddShape(shape1);

RadDiagramShape shape2 = new RadDiagramShape()
{
    Text = "shape2",
    ZIndex = 2,
    ElementShape = new EllipseShape(),
    BackColor = System.Drawing.Color.LightGreen
};
shape2.Position = new Telerik.Windows.Diagrams.Core.Point(150, 60);
radDiagram1.AddShape(shape2);

RadDiagramShape shape3 = new RadDiagramShape()
{
    Text = "shape3",
    ZIndex = 1,
    ElementShape = new EllipseShape(),
    BackColor = System.Drawing.Color.LightCoral
};
shape3.Position = new Telerik.Windows.Diagrams.Core.Point(60, 60);
radDiagram1.AddShape(shape3);

We have reversed the natural ZOrder of the 3 Shapes.

WinForms RadDiagram ZOrder

Using the RadDiagram Commands

RadDiagram provides a set of predefined commands for manipulating the selected items' ZIndices. "BringForward" and "SendBackward" allow you to increase/decrease the Z-Indices of the selected RadDiagramItems. If you need to bring the selected item(s) on top of all other items or below them, you can use "BringToFront" and "SentToback":


RadDiagramShape shape1 = new RadDiagramShape()
{
    Text = "shape1",
    ZIndex = 1,
    ElementShape = new EllipseShape(),
    BackColor = System.Drawing.Color.LightBlue
};
shape1.Position = new Telerik.Windows.Diagrams.Core.Point(100, 10);
radDiagram1.AddShape(shape1);

RadDiagramShape shape2 = new RadDiagramShape()
{
    Text = "shape2",
    ZIndex = 2,
    ElementShape = new EllipseShape(),
    BackColor = System.Drawing.Color.LightGreen
};
shape2.Position = new Telerik.Windows.Diagrams.Core.Point(150, 80);
radDiagram1.AddShape(shape2);

RadDiagramShape shape3 = new RadDiagramShape()
{
    Text = "shape3",
    ZIndex = 3,
    ElementShape = new EllipseShape(),
    BackColor = System.Drawing.Color.LightCoral
};
shape3.Position = new Telerik.Windows.Diagrams.Core.Point(60, 80);
radDiagram1.AddShape(shape3);

RadDiagramConnection connection1 = new RadDiagramConnection() { Name = "connection1" };
connection1.Source = shape1;
connection1.Target = shape2;
connection1.ZIndex = 2;
connection1.SourceConnectorPosition = "Right";
connection1.TargetConnectorPosition = "Right";

radDiagram1.Items.Add(connection1);

RadDiagramConnection connection2 = new RadDiagramConnection()
{
    Name = "connection2"
};
connection2.Source = shape1;
connection2.Target = shape3;
connection2.ZIndex = 1;
connection2.SourceConnectorPosition = "Left";
connection2.TargetConnectorPosition = "Left";
radDiagram1.Items.Add(connection2);

This way configured, the items in RadDiagram are ordered as illustrated below:

WinForms RadDiagram Shapes

Here is the result of selecting the first shape and executing the DiagramCommands.BringToFront:

WinForms RadDiagram diagram-items-manipulation-zorder 003


this.radDiagram1.SelectedItem = shape1;
this.radDiagram1.DiagramElement.TryExecuteCommand(DiagramCommands.BringToFront, "");

Here is the result of selecting the third shape and executing the DiagramCommands.SendToBack:

WinForms RadDiagram DiagramCommands SendToBack


this.radDiagram1.SelectedItem = shape3;
this.radDiagram1.DiagramElement.TryExecuteCommand(DiagramCommands.SendToBack, "");