C#에서 Control을 재귀적으로 순회하면서 TextBox, ComboBox, ListBox 등의 값을 초기화하는 함수를 만들어 보도록 합시다~
.NET Framework 3.5 환경을 기준으로 할 것이며, switch 문을 활용하여 TextBox, ComboBox, ListBox 등 컨트롤의 이름을 기반으로 초기화하도록 구성하였습니다.
상위 버전에서는 패턴 매칭(is 키워드 등)이나 switch-case에서 타입을 직접 비교할 수도 있을 텐데, 3.5버전에는 해당 기능이 없으므로 이름을 기반으로 하도록 진행하겠습니다~
재귀적으로 컨트롤을 초기화하는 함수 (switch 사용)
using System;
using System.Windows.Forms;
namespace BeomSang
{
public class BeomSang
{
public static void ClearControls(Control parent)
{
foreach (Control control in parent.Controls)
{
switch (control.GetType().Name)
{
case "TextBox":
((TextBox)control).Clear();
break;
case "ComboBox":
((ComboBox)control).SelectedIndex = -1;
break;
case "ListBox":
((ListBox)control).ClearSelected();
break;
case "CheckBox":
((CheckBox)control).Checked = false;
break;
case "RadioButton":
((RadioButton)control).Checked = false;
break;
case "NumericUpDown":
((NumericUpDown)control).Value = ((NumericUpDown)control).Minimum;
break;
default:
// 자식 컨트롤이 있는 경우, 재귀적으로 호출하여 초기화
if (control.HasChildren)
{
ClearControls(control);
}
break;
}
}
}
}
}
사용 예시
아래 코드처럼 Form에서 버튼 클릭 이벤트를 활용하여 모든 컨트롤을 초기화할 수 있습니다.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnClear_Click(object sender, EventArgs e)
{
BeomSang.ClearControls(this); // 폼 내부의 모든 컨트롤 초기화
}
}
코드 설명
✅ control.GetType().Name을 사용하여 컨트롤의 이름을 가져온 후, switch-case 문을 활용하여 각 컨트롤을 초기화합니다.
✅ default에서 HasChildren 속성을 확인하여 자식 컨트롤이 있는 경우 재귀적으로 함수를 호출합니다.
✅ .NET Framework 3.5에서는 패턴 매칭 (is 연산자 활용) 이 지원되지 않으므로, switch 문 내에서 명시적으로 형 변환 (casting) 을 수행하였습니다.
필요에 따라 초기화 대상 컨트롤을 추가하시면 더욱 유용하게 활용하실 수 있습니다. 😊
