HOWTO · Csharp

C#에서 버튼 비활성화 및 활성화

이 가이드에서는 C#에서 버튼을 비활성화 및 활성화하는 방법을 살펴봅니다.

이 페이지의 내용

Windows Forms 앱에서 버튼을 비활성화하려면 Enabled 속성을 false로 설정하고, 다시 사용할 수 있게 하려면 true로 설정합니다. 정확한 속성은 UI 프레임워크에 따라 다릅니다. WPF에서는 IsEnabled를 사용하고, Windows Forms와 ASP.NET Web Forms에서는 Enabled를 사용합니다. (C#)

버튼 상태 속성의 기능

활성화된 버튼은 사용자 입력을 받고 해당 동작을 실행할 수 있습니다. 버튼을 비활성화하면 인터페이스에서 사용자가 버튼을 눌러 동작을 실행할 수 없으며, 보통 프레임워크가 이 상태를 시각적으로 표시합니다. 애플리케이션, 디자이너 또는 마크업에서 초기 값을 따로 지정하지 않으면 버튼은 활성화된 상태로 시작합니다. 컨트롤을 비활성화하는 것은 인터페이스 동작일 뿐이며, 요청을 처리하는 코드에서 권한을 확인하거나 데이터를 검증하는 일을 대신하지 않습니다.

Windows Forms 버튼 만들기 또는 선택하기

Windows Forms 디자이너의 도구 상자에서 Button을 폼에 추가하고 (Name) 속성을 myButton으로 설정합니다. 디자이너에서 만든 컨트롤은 폼의 코드에서 사용할 수 있으므로 이벤트 처리기에서 상태를 바꿀 수 있습니다. 코드에서 Button을 만들어 폼에 추가할 수도 있습니다. ButtonBase는 기본 클래스이며, 일반적으로 버튼 컨트롤을 만들 때 직접 추가하는 구체적인 컨트롤은 아닙니다.

Windows Forms 버튼 비활성화 및 다시 활성화하기

상태를 바꾸는 코드는 myButton을 사용할 수 있는 폼 클래스 안에 둡니다. 다음 Windows Forms 예제에서는 디자이너에서 같은 폼에 myButton과 별도의 resetButton을 만들었다고 가정합니다. 처리기를 폼 클래스 안에 추가한 다음, 디자이너의 이벤트 창에서 myButton.Click을 DisableButton_Click에, resetButton.Click을 EnableButton_Click에 연결합니다. 또는 InitializeComponent() 다음에 myButton.Click += DisableButton_Click;과 resetButton.Click += EnableButton_Click;을 작성해 연결할 수 있습니다. 처리기의 코드는 다음과 같습니다. private void DisableButton_Click(object sender, EventArgs e) { myButton.Enabled = false; } 및 private void EnableButton_Click(object sender, EventArgs e) { myButton.Enabled = true; }. 첫 번째 버튼을 클릭하면 그 버튼이 비활성화되고, 별도의 재설정 버튼을 클릭하면 다시 활성화됩니다. 이 처리기 코드는 Windows Forms에만 해당하며 독립 실행 프로그램은 아닙니다.

다음 자체 완결형 콘솔 예제는 상태가 바뀌는 원리만 보여 줍니다. Windows Forms 컨트롤을 만들지는 않으며, 출력에는 속성 대입 전후의 불리언 상태가 표시됩니다. Windows Forms 폼에서는 위의 Button.Enabled 대입문을 사용하세요.

이 섹션의 코드와 화면에 표시되는 레이블 및 출력은 영어로 유지됩니다.

using System;

class Program
{
    static void Main()
    {
        bool submitButtonEnabled = true;
        submitButtonEnabled = false;
        Console.WriteLine($"Enabled: {submitButtonEnabled}");
        submitButtonEnabled = true;
        Console.WriteLine($"Enabled: {submitButtonEnabled}");
    }
}
Enabled: False
Enabled: True

이벤트 처리기와 폼 유효성 검사에서 버튼 상태 사용하기

자주 사용하는 패턴은 필수 입력란의 유효성 검사가 통과할 때까지 제출 버튼을 사용할 수 없게 두는 것입니다. 필드 값이 바뀌면 현재 값을 검증하고 그 결과를 submitButton.Enabled에 설정합니다. 폼 수준의 유효성 검사 처리기에서는 필수 검사를 모두 통과한 경우에만 값을 true로 되돌립니다. 제출을 처리할 때도 다시 검증하세요. UI 상태는 사용자를 안내하는 데 도움이 되지만, 작업을 보호하는 유일한 수단이어서는 안 됩니다. 요청 처리에 시간이 오래 걸린다면 작업이 진행되는 동안 제출 버튼을 비활성화하고, 실패한 경우를 포함해 작업이 끝나면 다시 활성화하여 사용자가 재시도할 수 있게 합니다.

프레임워크별 속성 이름

컨트롤 유형에 맞는 속성을 사용하세요. Windows Forms에서는 Button.Enabled, WPF에서는 Button.IsEnabled, ASP.NET Web Forms에서는 Button.Enabled를 사용합니다. WPF에서는 IsEnabled를 뷰 모델 값에 바인딩하여 애플리케이션 상태에 따라 인터페이스를 갱신할 수도 있습니다. ASP.NET Web Forms의 서버 측 Enabled는 렌더링되는 서버 컨트롤을 제어합니다. 이는 보안 검사가 아니며, 사용자는 클라이언트 측의 비활성화 상태를 바꿀 수 있습니다. 이 설명은 프레임워크 API를 다루며 독립 실행 프로그램은 아닙니다.

버튼 상태를 다룰 때 흔히 하는 실수와 점검 사항

  • 프레임워크와 컨트롤 유형을 확인한 뒤 Enabled와 IsEnabled 중 올바른 속성을 선택합니다.
  • 처리기가 예상한 Click 또는 유효성 검사 이벤트에 연결되어 있는지, 코드가 의도한 버튼 인스턴스를 참조하는지 확인합니다.
  • 버튼이 계속 비활성화되어 있다면 상태 속성을 설정하는 모든 위치를 추적하고 유효성 검사 조건이 참이 될 수 있는지 확인합니다.
  • 클릭 처리기에서 비활성화한 버튼을 다시 활성화할 방법을 마련합니다. 작업 완료 시 복원하거나 별도의 취소 또는 재설정 동작을 둘 수 있습니다.
  • 권한을 확인하고 제출된 값은 작업을 처리하는 코드에서 검증합니다. 버튼이 비활성화된 것처럼 보이는 것만으로는 작업을 보호할 수 없습니다.