첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.

728x90
반응형
728x170

TestProject.zip
다운로드

▶ MainForm.cs

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

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

        #region Field

        /// <summary>
        /// 크기
        /// </summary>
        private Size size = new Size(20, 20);

        /// <summary>
        /// 위치
        /// </summary>
        private Point position = new Point(20, 20);

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Property
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 위치 - Position

        /// <summary>
        /// 위치
        /// </summary>
        public Point Position
        {
            get
            {
                return this.position;
            }
            set
            {
                if(value.X < 0)
                {
                    this.position.X = ClientSize.Width - this.size.Width;
                }
                else if(value.X + this.size.Width > ClientSize.Width)
                {
                    this.position.X = 0;
                }
                else
                {
                    this.position.X = value.X;
                }
                
                if(value.Y < 0)
                {
                    this.position.Y = ClientSize.Height - this.size.Height;
                }
                else if(value.Y + this.size.Height > ClientSize.Height)
                {
                    this.position.Y = 0;
                }
                else
                {
                    this.position.Y = value.Y;
                }
            }
        }

        #endregion

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

        #region 생성자 - MainForm

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

            SetStyle(ControlStyles.DoubleBuffer        , true);
            SetStyle(ControlStyles.UserPaint           , true);
            SetStyle(ControlStyles.AllPaintingInWmPaint, true);
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Protected

        #region 페인트시 처리하기 - OnPaint(e)

        /// <summary>
        /// 페인트시 처리하기
        /// </summary>
        /// <param name="e">이벤트 발생자</param>
        protected override void OnPaint(PaintEventArgs e)
        {
            e.Graphics.FillRectangle
            (
                new SolidBrush(Color.Red), 
                Position.X, 
                Position.Y, 
                this.size.Width, 
                this.size.Height
            );
        }

        #endregion

        ////////////////////////////////////////////////////////////////////////////////////////// Private
        //////////////////////////////////////////////////////////////////////////////// Event

        #region 폼 로드시 처리하기 - Form_Load(sender, e)

        /// <summary>
        /// 폼 로드시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void Form_Load(object sender, EventArgs e)
        {
            this.timer.Start();
        }

        #endregion
        #region 폼 키 눌림시 처리하기 - Form_KeyDown(sender, e)

        /// <summary>
        /// 폼 키 눌림시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void Form_KeyDown(object sender, KeyEventArgs e)
        {
            if(e.KeyValue == 37)
            {
                Position = new Point(Position.X - this.size.Width, Position.Y);
            }

            if(e.KeyValue == 38)
            {
                Position = new Point(Position.X, Position.Y - this.size.Width);
            }

            if(e.KeyValue == 39)
            {
                Position = new Point(Position.X + this.size.Height, Position.Y);
            }

            if(e.KeyValue == 40)
            {
                Position = new Point(Position.X, Position.Y + this.size.Height);
            }
        }

        #endregion
        #region 타이머 틱 발생시 처리하기 - timer_Tick(sender, e)

        /// <summary>
        /// 타이머 틱 발생시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void timer_Tick(object sender, EventArgs e)
        {
            Text = string.Format("{0} {1}", DateTime.Now, Position);

            Refresh();
        }

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

댓글을 달아 주세요