반응형

C#, 단추 동적 생성/제거, 클릭 이벤트 핸들러

글. 오상문 sualchi@daum.net 

 

앞에서 다뤘던 단추 동적 생성 예제를 확장한 예제입니다. 

동적 생성한 단추를 화면에 추가하고, 제거합니다.

또한 단추를 클릭할 때 사용될 클릭 이벤트 핸들러를 등록하는 방법도 보여줍니다.

 

(1) 비주얼 스튜디오에서 C# 윈도우 폼 프로젝트를 만듭니다.

 

(2) 화면을 다음처럼 구성합니다. 

 

 

(4) 생성, 제거, 종료 단추를 더블 클릭하면 각각 처리 부분을 등록할 수 있습니다. 

다음 소스를 참고하여 추가할 부분을 작성합니다. 

 

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

 

namespace dynamic_new_buttons
{
    public partial class Form1 : Form
    {
        private List<Button> myButtons = new List<Button>();  // 버튼을 담을 리스트 생성
        private int cntBtn = 0;  // 현재 화면에 동적 생성한 버튼 수 초기화 

 

        public Form1()
        {
            InitializeComponent();
        }

 

        private void btnNew_Click(object sender, EventArgs e)
        {
            int cnt = Convert.ToInt32(countBox.Text);  // 텍스트상자의 값을 정수로 가져옴

 

            if (cnt < 1 || cntBtn == cnt) // 1보다 작거나 현재와 같은 숫자면 무시하고 돌아감
                return;

            if (cntBtn > 0)  // 현재 존재하는 버튼이 있으면 화면과 리스트에서 삭제함
                delListBtn();

 

            // 새로운 버튼을 생성하여 리스트에 추가하고, 속성을 설정함.
            for (int i = 0; i < cnt; i++)
            {
                myButtons.Add(new Button());
                myButtons[i].Location = new Point(50 + 25 * i, 50 + 25 * i);
                myButtons[i].Name = "myButton" + i.ToString();
                myButtons[i].Text = "Button" + i.ToString();
                myButtons[i].UseVisualStyleBackColor = true;
                myButtons[i].Tag = 0;
                // 버튼을 클릭할 때 처리할 이벤트 처리기 등록
                myButtons[i].Click += new EventHandler(btnClick);
                // 생성한 버튼을 화면 컨트롤에 추가해서 보이게 함
                this.Controls.Add(myButtons[i]);
            }

            cntBtn = cnt;  // 현재 화면에 새로 생성한 버튼 수를 저장
        }

 

        private void btnDel_Click(object sender, EventArgs e)
        {
            delListBtn();   // 리스트에 있는 버튼 삭제
        }

 

        private void bteExit_Click(object sender, EventArgs e)
        {
            Close();   // 창 종료
        }

 

        private void delListBtn()
        {

          int cnt = myButtons.Count;


            // 등록된 컨트롤 정보 삭제
            for (int i = 0; i < cnt; i++)
                this.Controls.Remove(myButtons[i]);

 

            // 버튼 리스트에 있는 객체 삭제
            for (int i = 0; i < cnt; i++)
                myButtons.RemoveAt(i);

 

            // 동적 생성한 버튼 수를 0으로 초기화
            cntBtn = 0;
        }

 

        // 버튼 클릭 이벤트 처리기
        void btnClick(object sender, EventArgs e)
        {
            int n;
            Button btn = sender as Button;  // 현재 버튼 객체

            n = (int)btn.Tag;  // 버튼의 태그 번호 (초기값 0)
            btn.Text = "눌림: " + n.ToString(); // "눌림 " + 버튼 태그 번호를 버튼에 출력
            btn.Tag = n + 1;   // 버튼 태그 번호 증가
        }
    }
}

(4) 실행하면 다음과 같은 실행 화면이 나타납니다.

'생성' 단추를 누르면 10개 버튼이 만들어집니다. 

숫자를 조정하려면 텍스트상자의 숫자를 바꾸고 '생성' 단추를 누릅니다.

 

 

 

(5) 생성된 단추를 클릭하면 클릭한 숫자를 보여줍니다. 

 

 

<이상>

 

반응형

+ Recent posts