Back to Devexpress

How to: Create and Show a Radial Menu

windowsforms-14579-controls-and-libraries-ribbon-bars-and-menu-examples-popup-menus-how-to-create-and-show-a-radial-menu.md

latest7.2 KB
Original Source

How to: Create and Show a Radial Menu

  • Jul 02, 2024
  • 3 minutes to read

This example creates a WinForms Radial Menu:

View Example: Create and Show a WinForms Radial Menu

csharp
using System.Drawing;
using System.Windows.Forms;
using DevExpress.XtraBars.Ribbon;
using DevExpress.XtraBars;

namespace CreateRadialMenu {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();

            barManager = barManager1;
            barManager.ItemClick += new ItemClickEventHandler(barManager_ItemClick);
            // Create Radial Menu
            radialMenu = new RadialMenu(barManager);
            radialMenu.AddItems(GetRadialMenuItems(barManager));
        }

        BarManager barManager;
        RadialMenu radialMenu;

        private void btnShowRadialMenu_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) {
            // Display Radial Menu
            if (radialMenu == null) return;
            Point pt = this.Location;
            pt.Offset(this.Width / 2, this.Height / 2);
            radialMenu.ShowPopup(pt);
        }

        BarItem[] GetRadialMenuItems(BarManager barManager) {
            // Create bar items to display in Radial Menu
            BarItem btnCopy = new BarButtonItem(barManager, "Copy");
            btnCopy.ImageOptions.ImageUri.Uri = "Copy;Size16x16";

            BarItem btnCut = new BarButtonItem(barManager, "Cut");
            btnCut.ImageOptions.ImageUri.Uri = "Cut;Size16x16";

            BarItem btnDelete = new BarButtonItem(barManager, "Delete");
            btnDelete.ImageOptions.ImageUri.Uri = "Delete;Size16x16";

            BarItem btnPaste = new BarButtonItem(barManager, "Paste");
            btnPaste.ImageOptions.ImageUri.Uri = "Paste;Size16x16";

            // Sub-menu with 3 check buttons
            BarSubItem btnMenuFormat = new BarSubItem(barManager, "Format");
            BarCheckItem btnCheckBold = new BarCheckItem(barManager, false);
            btnCheckBold.Caption = "Bold";
            btnCheckBold.ImageOptions.ImageUri.Uri = "Bold;Size16x16";

            BarCheckItem btnCheckItalic = new BarCheckItem(barManager, true);
            btnCheckItalic.Caption = "Italic";
            btnCheckItalic.ImageOptions.ImageUri.Uri = "Italic;Size16x16";

            BarCheckItem btnCheckUnderline = new BarCheckItem(barManager, false);
            btnCheckUnderline.Caption = "Underline";
            btnCheckUnderline.ImageOptions.ImageUri.Uri = "Underline;Size16x16";

            BarItem[] subMenuItems = new BarItem[] { btnCheckBold, btnCheckItalic, btnCheckUnderline };
            btnMenuFormat.AddItems(subMenuItems);

            BarItem btnFind = new BarButtonItem(barManager, "Find");
            btnFind.ImageOptions.ImageUri.Uri = "Find;Size16x16";

            BarItem btnUndo = new BarButtonItem(barManager, "Undo");
            btnUndo.ImageOptions.ImageUri.Uri = "Undo;Size16x16";

            BarItem btnRedo = new BarButtonItem(barManager, "Redo");
            btnRedo.ImageOptions.ImageUri.Uri = "Redo;Size16x16";

            return new BarItem[] {btnCopy, btnCut, btnDelete, btnPaste, btnMenuFormat, btnFind, btnUndo, btnRedo};
        }

        void barManager_ItemClick(object sender, ItemClickEventArgs e) {
            //...
            Text = "Item clicked: " + e.Item.Caption;
        }
    }
}
vb
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Linq
Imports System.Text
Imports System.Windows.Forms
Imports DevExpress.XtraBars.Ribbon
Imports DevExpress.XtraBars

Namespace CreateRadialMenu
    Partial Public Class Form1
        Inherits Form

        Public Sub New()
            InitializeComponent()

            barManager = barManager1
            AddHandler barManager.ItemClick, AddressOf barManager_ItemClick
            ' Create Radial Menu
            radialMenu = New RadialMenu(barManager)
            radialMenu.AddItems(GetRadialMenuItems(barManager))
        End Sub

        Private barManager As BarManager
        Private radialMenu As RadialMenu

        Private Sub btnShowRadialMenu_ItemClick(ByVal sender As Object, ByVal e As DevExpress.XtraBars.ItemClickEventArgs) Handles btnShowRadialMenu.ItemClick
            ' Display Radial Menu
            If radialMenu Is Nothing Then
                Return
            End If
            Dim pt As Point = Me.Location
            pt.Offset(Me.Width \ 2, Me.Height \ 2)
            radialMenu.ShowPopup(pt)
        End Sub

        Private Function GetRadialMenuItems(ByVal barManager As BarManager) As BarItem()
            ' Create bar items to display in Radial Menu
            Dim btnCopy As BarItem = New BarButtonItem(barManager, "Copy")
            btnCopy.ImageOptions.ImageUri.Uri = "Copy;Size16x16"

            Dim btnCut As BarItem = New BarButtonItem(barManager, "Cut")
            btnCut.ImageOptions.ImageUri.Uri = "Cut;Size16x16"

            Dim btnDelete As BarItem = New BarButtonItem(barManager, "Delete")
            btnDelete.ImageOptions.ImageUri.Uri = "Delete;Size16x16"

            Dim btnPaste As BarItem = New BarButtonItem(barManager, "Paste")
            btnPaste.ImageOptions.ImageUri.Uri = "Paste;Size16x16"

            ' Sub-menu with 3 check buttons
            Dim btnMenuFormat As New BarSubItem(barManager, "Format")
            Dim btnCheckBold As New BarCheckItem(barManager, False)
            btnCheckBold.Caption = "Bold"
            btnCheckBold.ImageOptions.ImageUri.Uri = "Bold;Size16x16"

            Dim btnCheckItalic As New BarCheckItem(barManager, True)
            btnCheckItalic.Caption = "Italic"
            btnCheckItalic.ImageOptions.ImageUri.Uri = "Italic;Size16x16"

            Dim btnCheckUnderline As New BarCheckItem(barManager, False)
            btnCheckUnderline.Caption = "Underline"
            btnCheckUnderline.ImageOptions.ImageUri.Uri = "Underline;Size16x16"

            Dim subMenuItems() As BarItem = { btnCheckBold, btnCheckItalic, btnCheckUnderline }
            btnMenuFormat.AddItems(subMenuItems)

            Dim btnFind As BarItem = New BarButtonItem(barManager, "Find")
            btnFind.ImageOptions.ImageUri.Uri = "Find;Size16x16"

            Dim btnUndo As BarItem = New BarButtonItem(barManager, "Undo")
            btnUndo.ImageOptions.ImageUri.Uri = "Undo;Size16x16"

            Dim btnRedo As BarItem = New BarButtonItem(barManager, "Redo")
            btnRedo.ImageOptions.ImageUri.Uri = "Redo;Size16x16"

            Return New BarItem() {btnCopy, btnCut, btnDelete, btnPaste, btnMenuFormat, btnFind, btnUndo, btnRedo}
        End Function

        Private Sub barManager_ItemClick(ByVal sender As Object, ByVal e As ItemClickEventArgs)
            '...
            Text = "Item clicked: " & e.Item.Caption
        End Sub
    End Class
End Namespace

See Also

Radial Menu