첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
본 블로그는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 블로그 콘텐츠 향상을 위해 쓰여집니다.

728x90
반응형
728x170

TestProject.zip
다운로드

▶ MainForm.cs

using System.Data.OleDb;
using System.Drawing;
using System.Windows.Forms;

using DevExpress.Utils;
using DevExpress.XtraEditors;
using DevExpress.XtraVerticalGrid;

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

        #region Field

        /// <summary>
        /// 연결
        /// </summary>
        private OleDbConnection connection;

        /// <summary>
        /// 모양 객체 배열
        /// </summary>
        private AppearanceObject[] appearanceObjectArray;

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - MainForm()

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

            #region 리스트 박스를 설정한다.

            AppearanceObject blueAppearanceObject = new AppearanceObject("Blue appearance");

            blueAppearanceObject.BackColor = Color.LightGray;
            blueAppearanceObject.ForeColor = Color.Black;
            blueAppearanceObject.Font      = new Font(blueAppearanceObject.Font, FontStyle.Italic);

            AppearanceObject greenAppearanceObject = new AppearanceObject("Green appearance");

            greenAppearanceObject.BackColor = Color.Yellow;
            greenAppearanceObject.ForeColor = Color.Black;
            greenAppearanceObject.Font      = new Font("Tahoma", 12, FontStyle.Bold);

            appearanceObjectArray = new AppearanceObject[] { blueAppearanceObject, greenAppearanceObject };

            this.listBox.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable;

            this.listBox.Items.Add("Blue appearance" );
            this.listBox.Items.Add("Green appearance");

            #endregion
            #region 수직 그리드 컨트롤을 설정한다.

            this.connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=nwind.mdb");

            this.gridControl.AllowDrop = true;

            this.gridControl.DataSource = Order.GetOrderList(this.connection);

            this.gridControl.BestFit();

            #endregion
            #region 이벤트를 설정한다.

            this.listBox.MeasureItem  += listBox_MeasureItem;
            this.listBox.DrawItem     += listBox_DrawItem;
            this.listBox.MouseDown    += listBox_MouseDown;
            this.gridControl.DragOver += gridControl_DragOver;
            this.gridControl.DragDrop += gridControl_DragDrop;

            #endregion
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Private
        //////////////////////////////////////////////////////////////////////////////// Event

        #region 리스트 박스 항목 측정하기 - listBox_MeasureItem(sender, e)

        /// <summary>
        /// 리스트 박스 항목 측정하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void listBox_MeasureItem(object sender, MeasureItemEventArgs e)
        {
            AppearanceObject appearance = appearanceObjectArray[e.Index];

            e.ItemHeight = (int)e.Graphics.MeasureString("Style Sample", appearance.Font).Height;
        }

        #endregion
        #region 리스트 박스 항목 그리기 - listBox_DrawItem(sender, e)

        /// <summary>
        /// 리스트 박스 항목 그리기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void listBox_DrawItem(object sender, DrawItemEventArgs e)
        {
            AppearanceObject appearanceObject = appearanceObjectArray[e.Index];

            using(SolidBrush backgroundBrush = new SolidBrush(appearanceObject.BackColor))
            {
                e.Graphics.FillRectangle(backgroundBrush, e.Bounds);
            }

            using(SolidBrush foregroundBrush = new SolidBrush(appearanceObject.ForeColor))
            {
                e.Graphics.DrawString("Style Sample", appearanceObject.Font, foregroundBrush, e.Bounds);
            }
        }

        #endregion
        #region 리스트 박스 마우스 DOWN 처리하기 - listBox_MouseDown(sender, e)

        /// <summary>
        /// 리스트 박스 마우스 DOWN 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void listBox_MouseDown(object sender, MouseEventArgs e)
        {
            ListBox listBox = sender as ListBox;

            int itemIndex = listBox.IndexFromPoint(e.X, e.Y);

            if(itemIndex != -1)
            {
                string dragData = listBox.Items[itemIndex].ToString();

                listBox.DoDragDrop(dragData, DragDropEffects.Copy);
            }
        }

        #endregion
        #region 그리드 컨트롤 드래그 OVER 처리하기 - gridControl_DragOver(sender, e)

        /// <summary>
        /// 그리드 컨트롤 드래그 OVER 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void gridControl_DragOver(object sender, DragEventArgs e)
        {
            VGridControl gridControl = sender as VGridControl;

            Point point = gridControl.PointToClient(new Point(e.X, e.Y));

            VGridHitInfo hitInfo = gridControl.CalcHitInfo(point);

            if(hitInfo.Row != null)
            {
                e.Effect = DragDropEffects.Copy;
            }
            else
            {
                e.Effect = DragDropEffects.None;
            }
        }

        #endregion
        #region 그리드 컨트롤 드래그 DROP 처리하기 - gridControl_DragDrop(sender, e)

        /// <summary>
        /// 그리드 컨트롤 드래그 DROP 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void gridControl_DragDrop(object sender, DragEventArgs e)
        {
            VGridControl gridControl = sender as VGridControl;

            Point point = gridControl.PointToClient(new Point(e.X, e.Y));

            VGridHitInfo hitInfo = gridControl.CalcHitInfo(point);

            string styleName = e.Data.GetData(DataFormats.Text).ToString();

            AppearanceObject appearance = GetAppearanceObject(this.appearanceObjectArray, styleName);

            if(appearance != null)
            {
                hitInfo.Row.Appearance.Combine(appearance);
            }
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////// Function

        #region 모양 객체 구하기 - GetAppearanceObject(sourceArray, name)

        /// <summary>
        /// 모양 객체 구하기
        /// </summary>
        /// <param name="sourceArray">소스 배열</param>
        /// <param name="name">명칭</param>
        /// <returns>모양 객체</returns>
        private AppearanceObject GetAppearanceObject(AppearanceObject[] sourceArray, string name)
        {
            for(int i = 0; i < sourceArray.Length; i++)
            {
                if(sourceArray[i].Name == name)
                {
                    return sourceArray[i];
                }
            }

            return null;
        }

        #endregion
    }
}
728x90
반응형
그리드형

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

[DEVEXPRESS/WINFORM] VGridControl 클래스 : CustomDrawTreeButton 이벤트를 사용해 트리 버튼 커스텀 그리기  (0) 2020.05.01
[DEVEXPRESS/WINFORM] VGridControl 클래스 : CustomDrawRowHeaderCell/CustomDrawRowHeaderIndent 이벤트를 사용해 행 헤더 스타일 설정하기  (0) 2020.05.01
[DEVEXPRESS/WINFORM] VGridControl 클래스 : RecordCellStyle 이벤트를 사용해 레코드 셀 스타일 설정하기  (0) 2020.05.01
[DEVEXPRESS/WINFORM] XAppearances 클래스 : LoadScheme 메소드를 사용해 사전 정의된 스타일 체계 설정하기  (0) 2020.05.01
[DEVEXPRESS/WINFORM] VGridControl 클래스 : StartDragRow/ProcessDragRow/EndDragRow 이벤트를 사용해 행 드래그 커스텀 처리하기  (0) 2020.05.01
[DEVEXPRESS/WINFORM] VGridControl 클래스 : DragDrop 이벤트를 사용해 행에 스타일 드래그하기  (0) 2020.05.01
[DEVEXPRESS/WINFORM] VGridControl 클래스 : DoDragDrop 메소드를 사용해 레코드 드래그하기  (0) 2020.05.01
[DEVEXPRESS/WINFORM] VGridControl 클래스 : GetRowPropertiesByFieldName 메소드를 사용해 행 속성 구하기  (0) 2020.05.01
[DEVEXPRESS/WINFORM] VGridControl 클래스 : ActiveFilter 속성을 사용해 필터 정보 구하기  (0) 2020.04.30
[DEVEXPRESS/WINFORM] VGridControl 클래스 : ActiveFilterCriteria 속성을 사용해 활성 필터 기준 설정하기  (0) 2020.04.30
[DEVEXPRESS/WINFORM] VGridControl 클래스 : ActiveFilterString 속성을 사용해 활성 필터 문자열 설정하기  (0) 2020.04.30
Posted by 사용자 icodebroker

댓글을 달아 주세요