DevExpress에서 DxValidationProvider 를 사용하여 유효성 검사를 합니다.

 

using System.Windows.Forms;

using DevExpress.XtraEditors.DXErrorProvider;

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

            #region 유효성 검사 입니다.

            this.dxValidationProvider1.ValidationMode = DevExpress.XtraEditors.DXErrorProvider.ValidationMode.Manual;

            ConditionValidationRule validationRule = new ConditionValidationRule();

            validationRule.ConditionOperator = ConditionOperator.IsNotBlank;
            validationRule.Value1 = "";

            validationRule.ErrorText = "Please enter a value that equals to the first editor's value";
            validationRule.ErrorType = ErrorType.Critical;

            dxValidationProvider1.SetValidationRule(this.textEdit1, validationRule);

            #endregion

            #region 이벤트를 설정합니다.

            this.simpleButton1.Click += SimpleButton1_Click;

            #endregion
        }

        /// <summary>
        /// 버튼 클릭시 동작합니다.
        /// </summary>
        /// <param name="sender">이벤트 발생자 입니다.</param>
        /// <param name="e">이벤트 인자 입니다.</param>
        private void SimpleButton1_Click(object sender, System.EventArgs e)
        {
            dxValidationProvider1.Validate();
        }
    }
}

DevExpress를 사용하여 로컬 드라이브에서 TreeList를 사용하여 디렉토리 구조를 확인할 수 있습니다.

 

예제 결과 입니다.

using System.IO;
using System.Windows.Forms;

using DevExpress.XtraTreeList;
using DevExpress.XtraTreeList.Columns;
using DevExpress.XtraTreeList.Nodes;

namespace DevTestForm
{
    /// <summary>
    /// 메인폼 클래스 입니다.
    /// </summary>
    public partial class MainForm : Form
    {   
        // Constructor (Public)

        #region MainForm() - 생성자 입니다.

        /// <summary>
        /// 생성자 입니다.
        /// </summary>
        public MainForm()
        {
            InitializeComponent();
            InitTreeList();
            InitData();

            #region 이벤트를 설정합니다.

            #endregion
        }

        #endregion

        private void InitTreeList()
        {
            TreeListColumn fullNameColumn = new TreeListColumn();
            TreeListColumn nameColumn     = new TreeListColumn();
            TreeListColumn typeColumn     = new TreeListColumn();
            TreeListColumn sizeColumn     = new TreeListColumn();

            fullNameColumn.Caption   = "FullName";
            fullNameColumn.FieldName = "FullName";

            nameColumn.Caption      = "Name";
            nameColumn.FieldName    = "Name";
            nameColumn.MinWidth     = 27;
            nameColumn.VisibleIndex = 0;
            nameColumn.Width        = 274;

            typeColumn.Caption      = "Type";
            typeColumn.FieldName    = "Type";
            typeColumn.VisibleIndex = 1;
            typeColumn.Width        = 112;

            sizeColumn.AppearanceCell.Options.UseTextOptions = true;
            sizeColumn.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far;
            sizeColumn.Caption                               = "Size(Bytes)";
            sizeColumn.FieldName                             = "Size";
            sizeColumn.Format.FormatType                     = DevExpress.Utils.FormatType.Numeric;
            sizeColumn.Format.FormatString                   = "n0";
            sizeColumn.VisibleIndex                          = 2;
            sizeColumn.Width                                 = 123;

            this.devTreeList.Columns.AddRange(new TreeListColumn[]
            {
                fullNameColumn, nameColumn, typeColumn, sizeColumn
            });

            this.devTreeList.Dock                                   = DockStyle.Fill;
            this.devTreeList.OptionsBehavior.AutoChangeParent       = false;
            this.devTreeList.OptionsBehavior.AutoNodeHeight         = false;
            this.devTreeList.OptionsBehavior.CloseEditorOnLostFocus = false;
            this.devTreeList.OptionsBehavior.Editable               = false;
            this.devTreeList.OptionsBehavior.ShowToolTips           = false;
            this.devTreeList.OptionsBehavior.SmartMouseHover        = false;
            this.devTreeList.OptionsSelection.KeepSelectedOnClick   = false;

            this.devTreeList.StateImageList = this.imageList;

            #region 이벤트를 설정합니다.

            this.devTreeList.AfterCollapse += devTreeList_AfterCollapse;
            this.devTreeList.AfterExpand   += devTreeList_AfterExpand;
            this.devTreeList.BeforeExpand  += devTreeList_BeforeExpand;

            #endregion

        }

        // Event Method (Private)

        #region devTreeList_AfterCollapse(sender, e)

        /// <summary>
        /// 트리리스트의 노드가 접힌 후에 동작합니다.
        /// </summary>
        /// <param name="sender">이벤트 발생자 입니다.</param>
        /// <param name="e">이벤트 인자 입니다.</param>
        private void devTreeList_AfterCollapse(object sender, NodeEventArgs e)
        {
            if(e.Node.StateImageIndex != 1)
            { 
                e.Node.StateImageIndex = 0;
            }
        }

        #endregion

        #region devTreeList_AfterExpand(sender, e)

        /// <summary>
        /// 트리리스트의 노드가 펼쳐진 후에 동작합니다.
        /// </summary>
        /// <param name="sender">이벤트 발생자 입니다.</param>
        /// <param name="e">이벤트 인자 입니다.</param>
        private void devTreeList_AfterExpand(object sender, NodeEventArgs e)
        {
            if (e.Node.StateImageIndex != 1)
            {
                e.Node.StateImageIndex = 2;
            }
        }

        #endregion

        #region devTreeList_BeforeExpand(sender, e)

        /// <summary>
        /// 트리리스트의 노드가 펼쳐지기 전에 동작합니다.
        /// </summary>
        /// <param name="sender">이벤트 발생자 입니다.</param>
        /// <param name="e">이벤트 인자 입니다.</param>
        private void devTreeList_BeforeExpand(object sender, BeforeExpandEventArgs e)
        {
            if(e.Node.Tag != null)
            { 
                Cursor currentCursor = Cursor.Current;
                Cursor.Current = Cursors.WaitCursor;
                InitFolders(e.Node.GetDisplayText("FullName"), e.Node);
                e.Node.Tag = null;
                Cursor.Current = currentCursor;
            }
        }

        #endregion

        #region InitData() - 데이터를 초기화합니다.

        /// <summary>
        /// 데이터를 초기화합니다.
        /// </summary>
        private void InitData()
        { 
            InitFolders(Directory.GetDirectoryRoot(Directory.GetCurrentDirectory()), null);
        }

        #endregion

        #region InitFolders(path, node) - 폴더를 초기화 합니다.

        /// <summary>
        /// 폴더를 초기화 합니다.
        /// </summary>
        /// <param name="path">경로 입니다.</param>
        /// <param name="node">노드 입니다.</param>
        private void InitFolders(string path, TreeListNode node)
        {
            this.devTreeList.BeginUnboundLoad();
            
            TreeListNode treeListNode;
            DirectoryInfo directoryInfo;

            try
            {
                string[] root = Directory.GetDirectories(path);

                foreach(string item in root)
                {
                    try
                    {
                        directoryInfo = new DirectoryInfo(item);
                        treeListNode                 = this.devTreeList.AppendNode
                        (
                            new object[] { item, directoryInfo.Name, "Folder", null }, node
                        );
                        treeListNode.StateImageIndex = 0;
                        treeListNode.HasChildren     = HasFiles(item);

                        if (treeListNode.HasChildren)
                        {
                            treeListNode.Tag = true;
                        }
                    }
                    catch{ }
                    
                }
            }
            catch{ }

            InitFiles(path, node);
            this.devTreeList.EndUnboundLoad();
        }

        #endregion

        #region InitFiles(path, node) - 파일을 초기화 합니다.

        /// <summary>
        /// 파일을 초기화 합니다.
        /// </summary>
        /// <param name="path">경로 입니다.</param>
        /// <param name="node">노드 입니다.</param>
        private void InitFiles(string path, TreeListNode node)
        {
            TreeListNode treeListNode;

            FileInfo fileInfo;

            try
            {
                string[] root = Directory.GetFiles(path);

                foreach(string item in root)
                {
                    fileInfo = new FileInfo(item);

                    treeListNode                 = this.devTreeList.AppendNode
                    (
                        new object[] { item, fileInfo.Name, "File", fileInfo.Length }, node
                    );

                    treeListNode.StateImageIndex = 1;
                    treeListNode.HasChildren     = false;
                }
            }
            catch { }
        }

        #endregion

        #region HasFiles(path) - 파일의 존재 여부를 확인합니다.

        /// <summary>
        /// 파일의 존재 여부를 확인합니다.
        /// </summary>
        /// <param name="path">경로 입니다.</param>
        /// <returns>파일 유무를 리턴합니다.</returns>
        private bool HasFiles(string path)
        {
            string[] root = Directory.GetFiles(path);

            if(root.Length > 0)
            { 
                return true;
            }

            root = Directory.GetDirectories(path);

            if(root.Length > 0)
            { 
                return true;
            }

            return false;
        }

        #endregion
    }
}

DevExpress에서 TreeList에서 노드 추가하기 입니다.

 

TreeList에서 노드 추가한 결과 입니다.

using System.Windows.Forms;

using DevExpress.XtraEditors;
using DevExpress.XtraLayout;
using DevExpress.XtraTreeList;
using DevExpress.XtraTreeList.Columns;
using DevExpress.XtraTreeList.Nodes;

namespace DevTestForm
{
    /// <summary>
    /// 메인폼 클래스 입니다.
    /// </summary>
    public partial class MainForm : Form
    {   
        // Constructor (Public)

        #region MainForm() - 생성자 입니다.

        /// <summary>
        /// 생성자 입니다.
        /// </summary>
        public MainForm()
        {
            InitializeComponent();

            CreateColumns(this.devTreeList);
            CreateNodes(this.devTreeList);

            #region 이벤트를 설정합니다.

            #endregion
        }

        #endregion


        #region CreateColumns(treeList) - 컬럼을 생성합니다.

        /// <summary>
        /// 컬럼을 생성합니다.
        /// </summary>
        /// <param name="treeList">TreeList 입니다.</param>
        private void CreateColumns(TreeList treeList)
        { 
            treeList.BeginUpdate();

            TreeListColumn column1 = treeList.Columns.Add();
            column1.Caption      = "Customer";
            column1.VisibleIndex = 0;

            TreeListColumn column2 = treeList.Columns.Add();
            column2.Caption      = "Location";
            column2.VisibleIndex = 1;

            TreeListColumn column3 = treeList.Columns.Add();
            column3.Caption      = "Phone";
            column3.VisibleIndex = 2;

            treeList.EndUpdate();
        }

        #endregion

        #region CreateNodes(treeList)

        /// <summary>
        /// 노드를 생성합니다.
        /// </summary>
        /// <param name="treeList">TreeList 입니다.</param>
        private void CreateNodes(TreeList treeList)
        { 
            treeList.BeginUnboundLoad();

            TreeListNode parentForRootNodes = null;
            TreeListNode rootNode = treeList.AppendNode
            (
                new object[]{"AAAAAA", "BBBBBB", "000-0000-0000"}, parentForRootNodes
            );

            treeList.AppendNode
            (
                new object[] { "CCCCCC", "DDDDDDD", "1111-1111-1111" }, rootNode
            );

            treeList.AppendNode
            (
                new object[] { "ABB", "ADDADA", "222-2222-1111" }, rootNode
            );

            treeList.EndUnboundLoad();
        }

        #endregion

    }
}

DevExpress로 탭 그룹을 생성하는 코드 입니다.

 

탭 그룹 생성 예제

 

using System.Windows.Forms;

using DevExpress.XtraEditors;
using DevExpress.XtraLayout;

namespace DevTestForm
{
    /// <summary>
    /// 메인폼 클래스 입니다.
    /// </summary>
    public partial class MainForm : Form
    {   
        // Constructor (Public)

        #region MainForm() - 생성자 입니다.

        /// <summary>
        /// 생성자 입니다.
        /// </summary>
        public MainForm()
        {
            InitializeComponent();

            CreateTabGroup();

            #region 이벤트를 설정합니다.

            #endregion
        }

        #endregion

        #region CreateTabGroup() - 탭 그룹을 생성합니다.

        /// <summary>
        /// 탭 그룹을 생성합니다.
        /// </summary>
        private void CreateTabGroup()
        { 
            LayoutControl layoutControl = new LayoutControl();

            layoutControl.Dock = DockStyle.Fill;
            this.Controls.Add(layoutControl);

            layoutControl.BeginUpdate();

            try
            {
                // 루트 그룹에 탭 그룹을 생성합니다.
                TabbedControlGroup tabbedGroup = layoutControl.Root.AddTabbedGroup();
                tabbedGroup.Name = "TabbedGroup";

                // 하나의 탭에 사진 그룹을 추가합니다.
                LayoutControlGroup groupImage = tabbedGroup.AddTabPage() as LayoutControlGroup;
                groupImage.Name = "layoutGroupPhoto";
                groupImage.Text = "Photo";

                // 이미지 그룹에 이미지가 출력되도록 레이아웃 아이템을 추가합니다.
                LayoutControlItem layoutItemImage = groupImage.AddItem();
                layoutItemImage.Name        = "layoutItemPhoto";
                layoutItemImage.Control     = new PictureEdit(){ Name = "pictureEdutPhoto"};
                layoutItemImage.TextVisible = false;

                // 하나의 탭에 노트 그룹을 추가합니다.
                LayoutControlGroup groupNotes = tabbedGroup.AddTabPage() as LayoutControlGroup;
                groupNotes.Name = "layoutGroupNotes";
                groupNotes.Text = "Notes";

                // 노트 그룹에 노트가 출력되도록 레이아웃 아이템을 추가합니다.
                LayoutControlItem layoutItemNotes = groupNotes.AddItem();
                layoutItemNotes.Name        = "layoutItemNotes";
                layoutItemNotes.Control     = new MemoEdit(){ Name = "memoEditNotes"};
                layoutItemNotes.TextVisible = false;

                // 첫번째 탭이 출력됩니다.
                tabbedGroup.SelectedTabPage = groupImage;
            }
            finally
            {
                layoutControl.EndUpdate();
            }

        }

        #endregion
    }
}

XtraDialog로 로그인 화면 만들기 입니다.

 

LoginUserControl.cs 파일 입니다.

using System.Windows.Forms;

using DevExpress.XtraEditors;
using DevExpress.XtraLayout;

namespace WindowsFormsApp1
{
    /// <summary>
    /// 로그인 유저 컨트롤 클래스 입니다.
    /// </summary>
    public partial class LoginUserControl : XtraUserControl
    {
        // Constructor (Public)

        #region LoginUserControl() - 생성자 입니다.

        /// <summary>
        /// 생성자 입니다.
        /// </summary>
        public LoginUserControl()
        {
            InitializeComponent();

            LayoutControl layoutControl = new LayoutControl();

            layoutControl.Dock = DockStyle.Fill;

            TextEdit textLogin      = new TextEdit();
            TextEdit textPassword   = new TextEdit();
            CheckEdit checkEditKeep = new CheckEdit(){ Text = "Keep me Signed in" };

            SeparatorControl separatorControl = new SeparatorControl();

            layoutControl.AddItem(string.Empty, textLogin    ).TextVisible = false;
            layoutControl.AddItem(string.Empty, textPassword ).TextVisible = false;
            layoutControl.AddItem(string.Empty, checkEditKeep);

            this.Controls.Add(layoutControl);

            this.Height = 100;
            this.Dock   = DockStyle.Top;

        }

        #endregion
    }
}

 

MainForm.cs 파일 입니다.

using System;
using System.Windows.Forms;

using DevExpress.XtraEditors;

namespace WindowsFormsApp1
{
    /// <summary>
    /// 메인폼 클래스 입니다.
    /// </summary>
    public partial class MainForm : Form
    {
       
        // Constructor (Public)

        #region MainForm() - 생성자 입니다.

        /// <summary>
        /// 생성자 입니다.
        /// </summary>
        public MainForm()
        {
            InitializeComponent();

            this.simpleButton1.Click += simpleButton1_Click;

        }

        #endregion

        // Event Method (Private)
        #region simpleButton1_Click(sender, e) - 버튼 클릭시 동작합니다.

        /// <summary>
        /// 버튼 클릭시 동작합니다.
        /// </summary>
        /// <param name="sender">이벤트 발생자 입니다.</param>
        /// <param name="e">이벤트 인자 입니다.</param>
        private void simpleButton1_Click(object sender, EventArgs e)
        {
            LoginUserControl myControl = new LoginUserControl();

            if(XtraDialog.Show(myControl, "Sign in", MessageBoxButtons.OKCancel) == DialogResult.OK)
            { 
            
            }
        }

        #endregion

    }
}

입력상자에 커스텀 에디터 출력하기 입니다.

 

예제

using System;
using System.Windows.Forms;

using DevExpress.XtraEditors;

namespace WindowsFormsApp1
{
    /// <summary>
    /// 메인폼 클래스 입니다.
    /// </summary>
    public partial class MainForm : Form
    {
       
        // Constructor (Public)

        #region MainForm() - 생성자 입니다.

        /// <summary>
        /// 생성자 입니다.
        /// </summary>
        public MainForm()
        {
            InitializeComponent();

            XtraInputBoxArgs xtraInputBoxArgs = new XtraInputBoxArgs();

            xtraInputBoxArgs.Caption = "Shipping options";
            xtraInputBoxArgs.Prompt  = "Delivery Date";
            xtraInputBoxArgs.DefaultButtonIndex = 0;
            xtraInputBoxArgs.Showing += xtraInputBoxArgs_Showing;

            DateEdit editor = new DateEdit();

            editor.Properties.CalendarView = DevExpress.XtraEditors.Repository.CalendarView.TouchUI;
            editor.Properties.Mask.EditMask = "yyyy-MMMM-dd";
            xtraInputBoxArgs.Editor = editor;

            xtraInputBoxArgs.DefaultResponse = DateTime.Now.Date.AddDays(3);

            var result = XtraInputBox.Show(xtraInputBoxArgs).ToString();

        }

        #endregion

        #region xtraInputBoxArgs_Showing(sender, e) - 입력 박스가 출력될 때 발생합니다.

        /// <summary>
        /// 입력 박스가 출력될 때 발생합니다.
        /// </summary>
        /// <param name="sender">이벤트 발생자 입니다.</param>
        /// <param name="e">이벤트 인자 입니다.</param>
        private void xtraInputBoxArgs_Showing(object sender, XtraMessageShowingArgs e)
        {
            e.Form.Icon = this.Icon;
        }

        #endregion
    }
}

메시지 박스안의 버튼에 커스텀 폰트 적용하기 입니다.

 

 

using System.Windows.Forms;

using DevExpress.XtraEditors;

namespace WindowsFormsApp1
{
    /// <summary>
    /// 메인폼 클래스 입니다.
    /// </summary>
    public partial class MainForm : Form
    {
       
        // Constructor (Public)

        #region MainForm() - 생성자 입니다.

        /// <summary>
        /// 생성자 입니다.
        /// </summary>
        public MainForm()
        {
            InitializeComponent();

            XtraMessageBoxArgs xtraMessageBoxArgs = new XtraMessageBoxArgs();

            xtraMessageBoxArgs.Caption                                   = "메시지 박스 버튼 커스텀 폰트 설정하기";
            xtraMessageBoxArgs.Text                                      = "메시지 박스 버튼 커스텀 폰트 설정하기";
            xtraMessageBoxArgs.Buttons                                   = new DialogResult[] {DialogResult.OK};

            #region 이벤트를 설정합니다.

            xtraMessageBoxArgs.Showing += xtraMessageBoxArgs_Showing;
            #endregion

            XtraMessageBox.Show(xtraMessageBoxArgs).ToString();
        }


        #endregion

        // Event Method (Private)

        #region xtraMessageBoxArgs_Showing(sender, e) - 폼이 닫히기 전에 발생합니다.

        /// <summary>
        /// 메시지 박스가 출력될 때 발생합니다.
        /// </summary>
        /// <param name="sender">이벤트 발생자 입니다.</param>
        /// <param name="e">이벤트 인자 입니다.</param>
        private void xtraMessageBoxArgs_Showing(object sender, XtraMessageShowingArgs e)
        {
            e.Form.Appearance.FontStyleDelta = System.Drawing.FontStyle.Bold;

            MessageButtonCollection buttons = e.Buttons as MessageButtonCollection;

            SimpleButton button = buttons[DialogResult.OK] as SimpleButton;

            if(button != null)
            { 
                button.Appearance.FontSizeDelta = 15;
                button.Height                  += 10;
            }
        }

        #endregion
    }
}

메시지 박스안의 버튼에 커스텀 이미지 추가할 수 있습니다.

 

예제

using System.Windows.Forms;

using DevExpress.XtraEditors;

namespace WindowsFormsApp1
{
    /// <summary>
    /// 메인폼 클래스 입니다.
    /// </summary>
    public partial class MainForm : Form
    {        
        // Constructor (Public)

        #region MainForm() - 생성자 입니다.

        /// <summary>
        /// 생성자 입니다.
        /// </summary>
        public MainForm()
        {
            InitializeComponent();

            XtraMessageBoxArgs xtraMessageBoxArgs = new XtraMessageBoxArgs();

            xtraMessageBoxArgs.Caption                                   = "메시지 박스 버튼에 이미지 추가하기";
            xtraMessageBoxArgs.Text                                      = "메시지 박스 버튼에 이미지 추가하기";
            xtraMessageBoxArgs.Buttons                                   = new DialogResult[] {DialogResult.OK, DialogResult.Cancel, DialogResult.Retry};

            #region 이벤트를 설정합니다.

            xtraMessageBoxArgs.Showing += xtraMessageBoxArgs_Showing;
            #endregion

            XtraMessageBox.Show(xtraMessageBoxArgs).ToString();
        }

		#endregion

        // Event Method (Private)

        #region xtraMessageBoxArgs_Showing(sender, e) - 폼이 닫히기 전에 발생합니다.

        /// <summary>
        /// 메시지 박스가 출력될 때 발생합니다.
        /// </summary>
        /// <param name="sender">이벤트 발생자 입니다.</param>
        /// <param name="e">이벤트 인자 입니다.</param>
        private void xtraMessageBoxArgs_Showing(object sender, XtraMessageShowingArgs e)
        {
            foreach(var control in e.Form.Controls)
            {
                SimpleButton button  = control as SimpleButton;

                if(button != null)
                { 
                    button.ImageOptions.SvgImageSize = new System.Drawing.Size(16, 16);

                    switch(button.DialogResult.ToString())
                    { 
                        case ("OK"):
                            button.ImageOptions.SvgImage = this.svgImageCollection1[0];
                            break;
                        case ("Cancel"):
                            button.ImageOptions.SvgImage = this.svgImageCollection1[1];
                            break;
                        case ("Retry"):
                            button.ImageOptions.SvgImage = this.svgImageCollection1[2];
                            break;
                    }
                }
            }
        }

        #endregion
    }
}

DevExpress / Winform 자동 종료 메시지 박스 만들기 입니다.

몇초뒤에 닫힐지 설정하고, 설정된 시간이 점점 줄어드는 것을 확인할 수 있습니다.

 

 

using System.Windows.Forms;

using DevExpress.XtraEditors;

namespace WindowsFormsApp1
{
    /// <summary>
    /// 메인폼 클래스 입니다.
    /// </summary>
    public partial class MainForm : Form
    {
        // Constructor (Public)

        #region MainForm() - 생성자 입니다.

        /// <summary>
        /// 생성자 입니다.
        /// </summary>
        public MainForm()
        {
            InitializeComponent();

            XtraMessageBoxArgs xtraMessageBoxArgs = new XtraMessageBoxArgs();

            xtraMessageBoxArgs.AutoCloseOptions.Delay                    = 5000;
            xtraMessageBoxArgs.Caption                                   = "자동 종료 메시지";
            xtraMessageBoxArgs.Text                                      = "이 메시지는 5초 뒤에 닫힙니다.";
            xtraMessageBoxArgs.Buttons                                   = new DialogResult[] {DialogResult.OK, DialogResult.Cancel};
            xtraMessageBoxArgs.DefaultButtonIndex                        = 0;
            xtraMessageBoxArgs.AutoCloseOptions.ShowTimerOnDefaultButton = true;

            XtraMessageBox.Show(xtraMessageBoxArgs).ToString();

            #region 이벤트를 설정합니다.

            this.FormClosing += mainForm_FormClosing;

            #endregion
        }

        #endregion
    }
}

 

Bar 생성하기 입니다.

 

Bar 생성하기 예제

MainForm.cs 입니다.

using System.Windows.Forms;

using DevExpress.XtraBars;

namespace WindowsFormsApp2
{
    /// <summary>
    /// 메인폼 클래스 입니다.
    /// </summary>
    public partial class MainForm : Form
    {
        // Constructor (Public)

        #region MainForm() - 메인폼 생성자 입니다.

        /// <summary>
        /// 메인폼 생성자 입니다.
        /// </summary>
        public MainForm()
        {
            InitializeComponent();

            #region Bar를 생성합니다.

            BarManager barManager = new BarManager();
            barManager.Form = this;

            barManager.BeginUpdate();

            Bar bar1 = new Bar(barManager, "My MainMenu");
            Bar bar2 = new Bar(barManager, "My Bar");

            bar1.DockStyle = BarDockStyle.Top;
            bar2.DockStyle = BarDockStyle.Top;

            bar1.DockRow = 0;

            barManager.MainMenu = bar1;

            BarSubItem subMenuFile = new BarSubItem(barManager, "File");
            BarSubItem subMenuEdit = new BarSubItem(barManager, "Edit");
            BarSubItem subMenuView = new BarSubItem(barManager, "View");

            BarButtonItem buttonOpen       = new BarButtonItem(barManager, "Open"  );
            BarButtonItem buttonExit       = new BarButtonItem(barManager, "Exit"  );
            BarButtonItem buttonCopy       = new BarButtonItem(barManager, "Copy"  );
            BarButtonItem buttonCut        = new BarButtonItem(barManager, "Cut"   );
            BarButtonItem buttonViewOutput = new BarButtonItem(barManager, "Output");

            subMenuFile.AddItems(new BarItem[] { buttonOpen, buttonExit });
            subMenuFile.AddItems(new BarItem[] { buttonCopy, buttonCut  });
            subMenuView.AddItem (buttonViewOutput);

            bar1.AddItems(new BarItem[] { subMenuFile, subMenuEdit, subMenuView });

            bar2.AddItem(buttonViewOutput);

            barManager.EndUpdate();

            #endregion

            #region 이벤트 동작입니다.

            barManager.ItemClick += barManager_ItemClick;

            #endregion
        }

        #endregion

        #region barManager_ItemClick(sender, e) - Bar 아이템 클릭시 동작합니다.
        /// <summary>
        /// Bar 아이템 클릭시 동작합니다.
        /// </summary>
        /// <param name="sender">이벤트 발생자 입니다.</param>
        /// <param name="e">이벤트 인자 입니다.</param>
        private void barManager_ItemClick(object sender, ItemClickEventArgs e)
        {
            BarSubItem subMenu = e.Item as BarSubItem;

            if(subMenu != null) return;

            MessageBox.Show("Item " + e.Item.Caption + " has been clicked");
        }

        #endregion
    }
}

 

+ Recent posts