none
[C#] 문자열의 실제 길이 알아내기 RRS feed

  • 일반 토론

  • "한 문자의 폭은 얼마인가요?"
    라고 물으면.. 
    "그건 폰트사이즈에 따라 달라지는게 아닐까요?"
    라고 대답을 합니다. 그렇습니다. 한 문자의 폭은 폰트에 의해 결정되는거죠.. ^^(모두가 알고 있어요)
    그렇다면 문자사이즈를 구하는 법을 알아봅시다.

    간단한 Windows Form 예제입니다. 텍스트 박스로 예로 들겠습니다.
    윈도우 폼에 텍스트박스 하나 추가하고 Name을 txtInputString으로 설정합니다.
    그런후 Form1.cs에 아래 코드를 긁어 넣어주세요.
    아.. txtInputString의 MouseEnter이벤트 추가해주시구요.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            private void txtInputString_MouseEnter(object sender, EventArgs e)
            {
                // 텍스트 박스로부터 Graphics 객체를 얻는다.
                Graphics textGraphics = Graphics.FromHwnd(txtInputString.Handle);

                // 텍스트 박스의 내용(문자열)의 사이즈를 얻는다.
                SizeF stringSize = textGraphics.MeasureString(txtInputString.Text, txtInputString.Font);
                /*stringSize.Width는 문자열의 폭이되고 stringSize.Height는 문자열의 높이가 된답니다. */

                // 텍스트박스의 Width와 문자열의 Width를 비교한다.
                if (stringSize.Width > txtInputString.ClientSize.Width)
                {
                    MessageBox.Show("넘었다");
                }
                else
                { 
                }
            }
        }
    }


    테스트방법) 1. 텍스트박스에 문자들을 입력해본다. 
                     2. 마우스를 텍스트 박스위로 옮겨본다.(MouseEnter 이벤트 작동)
                     3. 텍스트박스 위로 마우스를 옮겼을 때, 텍스트박스보다 문자열의 폭이 길면 "넘었다"라는 메세지가 출력됩니다.

    이쯤에서 텍스트 박스가 아닌 경우에는 어떻게 하냐는 질문이 나올수 있을거 같은데요.
    Graphics textGraphics = Graphics.FromHwnd(txtInputString.Handle); 문장에서
    txtInputString을 다른 컨트롤로 바꿔줍니다.(Control을 상속받아서 만들어진 객체들이라면 모두 Handle이 있습니다.)
    SizeF stringSize = textGraphics.MeasureString(txtInputString.Text, txtInputString.Font); 문장에서는
    txtInputString.Text 부분은 원하는 문자열, txtInputString.Font은 원하는 문자열의 Font 를 넣어주시면 됩니다.

    그럼 즐프하세요..
    2011년 11월 4일 금요일 오전 4:17