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

728x90
반응형
728x170

TestProject.zip
다운로드

▶ MainForm.cs

using System;
using System.Windows.Forms;

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

        #region 생성자 - MainForm()

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

            this.textBox1.KeyPress += textBox1_KeyPress;
        }

        #endregion

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

        #region 텍스트 박스 1 키 PRESS 처리하기 - textBox1_KeyPress(sender, e)

        /// <summary>
        /// 텍스트 박스 1 키 PRESS 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            TextBox textBox = sender as TextBox;

            try
            {
                if(e.KeyChar != (int)Keys.Back && e.KeyChar != (int)Keys.Delete)
                {
                    if(textBox.Text.Length > 2)
                    {
                        string source = ExtractComma(textBox.Text);

                        textBox.Text = AddComma(source + e.KeyChar, textBox.MaxLength);

                        textBox.Select(textBox.Text.Length - 1, 1);
                    }
                }
            }
            catch(Exception)
            {
            }
        }

        #endregion

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

        #region 콤마 추출하기 - ExtractComma(source)

        /// <summary>
        /// 콤마 추출하기
        /// </summary>
        /// <param name="source">소스 문자열</param>
        /// <returns>콤마 추출 문자열</returns>
        private string ExtractComma(string source)
        {
            if(source.IndexOf(",") <= 0)
            {
                return source;
            }

            source = source.Substring(0, source.IndexOf(",")) + source.Substring(source.IndexOf(",") + 1);

            if(source.IndexOf(",") <= 0)
            {
                return source;
            }
            else
            {
                return ExtractComma(source);
            }
        }

        #endregion
        #region 콤마 추가하기 - AddComma(source, maximumTextLength)

        /// <summary>
        /// 콤마 추가하기
        /// </summary>
        /// <param name="source">소스 문자열</param>
        /// <param name="maximumTextLength">최대 텍스트 길이</param>
        /// <returns>콤마 추가 문자열</returns>
        private string AddComma(string source, int maximumTextLength)
        {
            char[] characterArray = new char[maximumTextLength];

            int j = maximumTextLength;

            int readCount = 0;

            string target;

            if(source.Length > 3)
            {
                for(int i = source.Length - 1; i >= 0; i--)
                {
                    j--;

                    characterArray[j] = source[i];

                    readCount++;

                    if(readCount == 3 && i != 0)
                    {
                        readCount = 0;

                        j--;
            
                        characterArray[j] = ',';
                    }
                }

                target = new string(characterArray, j, maximumTextLength - j);
            }
            else
            {
                target = source;
            }

            return target;
        }

        #endregion
    }
}
728x90
반응형
그리드형
Posted by 사용자 icodebroker

댓글을 달아 주세요