C# 컨트롤을 클리어 하는 재귀함수 (닷넷 프레임워크 3.5)

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) 을 수행하였습니다.

필요에 따라 초기화 대상 컨트롤을 추가하시면 더욱 유용하게 활용하실 수 있습니다. 😊

이전최근
댓글 쓰기
가져가실 때, 출처 표시 부탁드려요! 감사합니다. 💗