첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ TextBox 클래스 : KeyPress 이벤트를 사용해 숫자 입력시 자동으로 콤마 출력하기

------------------------------------------------------------------------------------------------------------------------


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

    }

}

 

------------------------------------------------------------------------------------------------------------------------

제한 사항 : 테스트용으로 숫자 이외 문자 입력이 가능하고, BACK SPACE 키나 DEL 키 처리 등이 미흡하다.

Posted by 사용자 icodebroker

댓글을 달아 주세요