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) 생성된 단추를 클릭하면 클릭한 숫자를 보여줍니다.
<이상>
'C#, Unity' 카테고리의 다른 글
C 언어로 작성된 FFmpeg Examples의 C# 포팅 소스 코드 (0) | 2022.07.07 |
---|---|
Visual Studio 2022 17.2 버전에서 C# 11 또는 .NET 7.0 preview 적용 (0) | 2022.06.18 |
C# 폼을 닫거나 종료 단추 누를 때 물어보고 처리하기 (0) | 2018.07.12 |
C# 키 코드 확인 예제 (0) | 2018.07.12 |
C# 로그인 창으로 접속하는 예제 (0) | 2018.07.11 |