첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

TestProject.zip
다운로드

▶ MainForm.cs

using System.Drawing;
using System.Windows.Forms;

using DevExpress.Data.Filtering;
using DevExpress.LookAndFeel;
using DevExpress.Skins;
using DevExpress.Utils;
using DevExpress.XtraEditors;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Views.Grid;

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

        #region Field

        /// <summary>
        /// 링크 브러시
        /// </summary>
        private SolidBrush linkBrush = new SolidBrush(EditorsSkins.GetSkin(UserLookAndFeel.Default.ActiveLookAndFeel).Colors["HyperLinkTextColor"]);

        /// <summary>
        /// 매칭 미발견 텍스트 폰트
        /// </summary>
        private Font noMatchFoundTextFont = new Font("Tahoma", 10);

        /// <summary>
        /// 매칭 미발견 텍스트
        /// </summary>
        private string noMatchFoundText = "No matches found";

        /// <summary>
        /// 매칭 미발견 사각형
        /// </summary>
        private Rectangle noMatchFoundRectangle = Rectangle.Empty;

        /// <summary>
        /// 다시 조회 시도 텍스트 폰트
        /// </summary>
        private Font trySearchingAgainTextFont = new Font("Tahoma", 15, FontStyle.Underline);

        /// <summary>
        /// 다시 조회 시도 텍스트 볼드체 폰트
        /// </summary>
        private Font trySearchingAgainTextBoldFont = new Font("Tahoma", 15, FontStyle.Underline | FontStyle.Bold);

        /// <summary>
        /// 다시 조회 시도 텍스트
        /// </summary>
        private string trySearchingAgainText = "Try searching again";

        /// <summary>
        /// 다시 조회 시도 사각형
        /// </summary>
        private Rectangle trySearchingAgainRectangle = Rectangle.Empty;

        /// <summary>
        /// 다시 조회 시도 사각형 커서 포함 여부
        /// </summary>
        private bool trySearchingAgainRectangleContainCursor = false;

        /// <summary>
        /// 오프셋
        /// </summary>
        private int offset = 10;

        /// <summary>
        /// 조회명
        /// </summary>
        private string searchName = string.Empty;

        #endregion

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

        #region 생성자 - MainForm()

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

            this.gridView.InitializeView
            (
                true,                          // Multi Select
                GridMultiSelectMode.RowSelect, // Grid Multi Select Mode
                DrawFocusRectStyle.CellFocus,  // Draw Focus Rect Style
                true,                          // Show Indicator
                true,                          // Show Column Headers
                true,                          // Allow Column Moving
                true,                          // Allow Column Resizing
                true,                          // Allow Filter
                true,                          // Allow Sort
                false,                         // Allow Cell Merge
                EditorShowMode.Default,        // Editor Show Mode
                false                          // Editable
            );
            
            this.gridView.OptionsBehavior.AutoPopulateColumns = true;

            this.gridControl.DataSource = new nwindDataSetTableAdapters.EmployeesTableAdapter().GetData();

            this.gridView.ActiveFilterCriteria = new BinaryOperator("City", searchName);

            this.gridView.CustomDrawEmptyForeground += gridView_CustomDrawEmptyForeground;
            this.gridView.MouseMove                 += gridView_MouseMove;
            this.gridView.MouseDown                 += gridView_MouseDown;
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region 그리드 뷰 빈 전경 커스텀 그리기 - gridView_CustomDrawEmptyForeground(sender, e)

        /// <summary>
        /// 그리드 뷰 빈 전경 커스텀 그리기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void gridView_CustomDrawEmptyForeground(object sender, CustomDrawEventArgs e)
        {
            e.DefaultDraw();

            e.Appearance.Options.UseFont = true;
            e.Appearance.Font            = this.noMatchFoundTextFont;

            Size size = e.Appearance.CalcTextSize(e.Cache, this.noMatchFoundText, e.Bounds.Width).ToSize();

            int x = (e.Bounds.Width - size.Width) / 2;
            int y = e.Bounds.Y + offset;

            this.noMatchFoundRectangle = new Rectangle(new Point(x, y), size);

            e.Appearance.DrawString(e.Cache, this.noMatchFoundText, this.noMatchFoundRectangle);

            e.Appearance.Font = this.trySearchingAgainRectangleContainCursor ? this.trySearchingAgainTextBoldFont : this.trySearchingAgainTextFont;

            size = e.Appearance.CalcTextSize(e.Cache, this.trySearchingAgainText, e.Bounds.Width).ToSize();

            x = this.noMatchFoundRectangle.X - (size.Width - this.noMatchFoundRectangle.Width) / 2;
            y = this.noMatchFoundRectangle.Bottom + offset;

            size.Width += offset;

            this.trySearchingAgainRectangle = new Rectangle(new Point(x, y), size);

            e.Appearance.DrawString(e.Cache, this.trySearchingAgainText, this.trySearchingAgainRectangle, this.linkBrush);
        }

        #endregion
        #region 그리드 뷰 마우스 이동시 처리하기 - gridView_MouseMove(sender, e)

        /// <summary>
        /// 그리드 뷰 마우스 이동시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void gridView_MouseMove(object sender, MouseEventArgs e)
        {
            GridView gridView = sender as GridView;

            this.trySearchingAgainRectangleContainCursor = this.trySearchingAgainRectangle.Contains(e.Location);

            gridView.GridControl.Cursor = this.trySearchingAgainRectangleContainCursor ? Cursors.Hand : Cursors.Default;

            gridView.InvalidateRect(this.trySearchingAgainRectangle);
        }

        #endregion
        #region 그리드 뷰 마우스 DOWN 처리하기 - gridView_MouseDown(sender, e)

        /// <summary>
        /// 그리드 뷰 마우스 DOWN 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void gridView_MouseDown(object sender, MouseEventArgs e)
        {
            GridView gridView = sender as GridView;

            if(this.trySearchingAgainRectangleContainCursor)
            {
                this.searchName = XtraInputBox.Show
                (
                    string.Format("Enter {0}", "Name"),
                    string.Format("Enter {0} dialog", "Name"),
                    this.searchName
                );

                gridView.ActiveFilterCriteria = new BinaryOperator("City", this.searchName);
            }
        }

        #endregion
    }
}
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요