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

728x90
반응형

■ ListBox 클래스, TextBox 클래스 : 탭 설정하기

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


TestProject.zip


MainForm.cs

 

 

using System;

using System.Collections.Generic;

using System.Runtime.InteropServices;

using System.Windows.Forms;

 

namespace TestProject

{

    /// <summary>

    /// 메인 폼

    /// </summary>

    public partial class MainForm : Form

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Import

        ////////////////////////////////////////////////////////////////////////////////////////// Static

        //////////////////////////////////////////////////////////////////////////////// Private

 

        #region 메시지 보내기 - SendMessage(windowHandle, message, wordParameter, longParameterArray)

 

        /// <summary>

        /// 메시지 보내기

        /// </summary>

        /// <param name="windowHandle">윈도우 핸들</param>

        /// <param name="message">메시지</param>

        /// <param name="wordParameter">WORD 매개 변수</param>

        /// <param name="longParameterArray">LONG 매개 변수 배열</param>

        /// <returns>처리 결과</returns>

        [DllImport("user32.dll", CharSet = CharSet.Auto)]

        private static extern IntPtr SendMessage(IntPtr windowHandle, uint message, int wordParameter, int[] longParameterArray);

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Field

        ////////////////////////////////////////////////////////////////////////////////////////// Private

 

        #region Field

 

        /// <summary>

        /// EM_SETTABSTOPS

        /// </summary>

        private const uint EM_SETTABSTOPS = 0xcb;

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - MainForm()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public MainForm()

        {

            InitializeComponent();

 

            #region 이벤트를 설정한다.

 

            Load += Form_Load;

 

            #endregion

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// 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)

        {

            SetTab(this.carListBox, new int[] { 120, 170, 220 });

            SetTab(this.carListBox, new int[] { 120, 170, 220 });

            

            SetTab(this.carTextBox, new int[] { 120, 170, 220 });

 

            AddData("SSC Ultimate Aero"           , 257, 1183, 654400 );

            AddData("Bugatti Veyron"              , 253, 1001, 1700000);

            AddData("Saleen S7 Twin-Turbo"        , 248, 750 , 555000 );

            AddData("Koenigsegg CCX"              , 245, 806 , 545568 );

            AddData("McLaren F1"                  , 240, 637 , 970000 );

            AddData("Ferrari Enzo"                , 217, 660 , 670000 );

            AddData("Jaguar XJ220"                , 217, 542 , 650000 );

            AddData("Pagani Zonda F"              , 215, 650 , 667321 );

            AddData("Lamborghini Murcielago LP640", 211, 640 , 430000 );

            AddData("Porsche Carrera GT"          , 205, 612 , 440000 );

        }

 

        #endregion

 

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

 

        #region 탭 설정하기 - SetTab(listBox, tabEnumerable)

 

        /// <summary>

        /// 탭 설정하기

        /// </summary>

        /// <param name="listBox">리스트 박스</param>

        /// <param name="tabEnumerable">탭 열거 목록</param>

        private void SetTab(ListBox listBox, IEnumerable<int> tabEnumerable)

        {

            listBox.UseTabStops         = true;

            listBox.UseCustomTabOffsets = true;

 

            ListBox.IntegerCollection offsetCollection = listBox.CustomTabOffsets;

 

            foreach(int tab in tabEnumerable)

            {

                offsetCollection.Add(tab);

            }

        }

 

        #endregion

        #region 탭 설정하기 - SetTab(textBox, tabArray)

 

        /// <summary>

        /// 탭 설정하기

        /// </summary>

        /// <param name="textBox">텍스트 박스</param>

        /// <param name="tabArray">탭 배열</param>

        private void SetTab(TextBox textBox, int[] tabArray)

        {

            SendMessage(textBox.Handle, EM_SETTABSTOPS, tabArray.Length, tabArray);

        }

 

        #endregion

 

        #region 데이터 추가하기 - AddData(name, mph, hp, price)

 

        /// <summary>

        /// 데이터 추가하기

        /// </summary>

        /// <param name="name">명칭</param>

        /// <param name="mph">MPH</param>

        /// <param name="hp">HP</param>

        /// <param name="price">가격</param>

        private void AddData(string name, int mph, int hp, decimal price)

        {

            string data = name + "\t" + mph.ToString() + " mph\t" + hp.ToString() + " hp\t" + price.ToString("C");

 

            this.carListBox.Items.Add(data);

 

            this.carTextBox.Text += data + "\r\n";

 

            this.carFormattedTextBox.Text += string.Format("{0,-30}{1,7} mph{2,7} hp{3,15:C}\r\n", name, mph, hp, price);

        }

 

        #endregion

    }

}

 

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

728x90
반응형
Posted by 사용자 icodebroker

댓글을 달아 주세요