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

TestProject.zip
다운로드

▶ MainForm.cs

using System;
using System.Windows.Forms;

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

        #region Field

        /// <summary>
        /// 이벤트 무시 여부
        /// </summary>
        private bool ignoreEvent = false;

        #endregion

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

        #region 생성자 - MainForm()

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

            #region 이벤트를 설정한다.

            this.decimalTextBox.TextChanged     += textBox_TextChanged;
            this.hexadecimalTextBox.TextChanged += textBox_TextChanged;
            this.octalTextBox.TextChanged       += textBox_TextChanged;
            this.binaryTextBox.TextChanged      += textBox_TextChanged;

            #endregion
        }

        #endregion

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

        #region 텍스트 박스 텍스트 변경시 처리하기 - textBox_TextChanged(sender, e)

        /// <summary>
        /// 텍스트 박스 텍스트 변경시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void textBox_TextChanged(object sender, EventArgs e)
        {
            if(this.ignoreEvent)
            {
                return;
            }

            this.ignoreEvent = true;

            TextBox sourceTextBox = sender as TextBox;

            long value = 0;

            try
            {
                switch(sourceTextBox.Name)
                {
                    case nameof(decimalTextBox)     : value = long.Parse(sourceTextBox.Text);          break;
                    case nameof(hexadecimalTextBox) : value = Convert.ToInt64(sourceTextBox.Text, 16); break;
                    case nameof(octalTextBox)       : value = Convert.ToInt64(sourceTextBox.Text, 8);  break;
                    case nameof(binaryTextBox)      : value = Convert.ToInt64(sourceTextBox.Text, 2);  break;
                    default                         : throw new Exception("알 수 없는 컨트롤 입니다 : " + sourceTextBox.Name);
                }
            }
            catch(Exception exception)
            {
                MessageBox.Show
                (
                    "입력 문자열 파싱시 에러가 발생했습니다.\n\n" + exception.Message,
                    "에러",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error
                );
            }

            if(sourceTextBox.Name != nameof(decimalTextBox))
            {
                this.decimalTextBox.Text = value.ToString();
            }

            if(sourceTextBox.Name != nameof(hexadecimalTextBox))
            {
                this.hexadecimalTextBox.Text = Convert.ToString(value, 16);
            }

            if(sourceTextBox.Name != nameof(octalTextBox))
            {
                this.octalTextBox.Text = Convert.ToString(value, 8);
            }

            if(sourceTextBox.Name != nameof(binaryTextBox))
            {
                this.binaryTextBox.Text = Convert.ToString(value, 2);
            }

            this.ignoreEvent = false;
        }

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

댓글을 달아 주세요