본문 바로가기
C#

[C#][.NET] 윈도우 앱 포커스

by teamnova 2024. 3. 25.

안녕하세요, 오늘은 포커스에 대해 알아보고 윈도우 앱에서 포커스를 다루는 법을 배워보겠습니다.

 

일단 포커스란 현재 사용자가 입력을 받을 수 있는 컨트롤을 가리킵니다.

컨트롤은 윈도우 앱에서 폼을 구성하는 하나의 구성요소입니다.

예를 들어 구글 웹페이지로 이동하면 화면 중앙에 검색창이 있죠.

 

이 때 이 검색창을 클릭하게 되면 다음과 같이 검색창이 클릭되고 포커스를 갖게 되는데 여기서 검색창의 입력칸이 하나의 컨트롤이라고 생각할 수 있습니다.

 

이렇게 하나의 컴포넌트가 포커스를 받게 되면 사용자가 구분할 수 있고 그 다음 사용자의 입력이 포커스와 연관될 것이라고 사용자는 예상할 수 있습니다. 이렇듯 포커스는 사용자 경험 향상을 위해 중요한 요소입니다.

그리고 웹페이지 외에도 안드로이드 앱, 윈도우 앱, ios 등 포커스는 대부분의 프로그램에서 사용되고 이것을 자유자재로 다루고 사용자의 편의를 위해 적절한 위치에 포커스를 주는 것도 개발자의 일이라고 볼 수 있습니다.

 

그래서 오늘은 윈도우 앱에서 포커스를 주고 없애고 변경하는 법을 알아보겠습니다.

 

방법은 다음과 같습니다.

// 'Control.Focus' 메서드는 호출된 컨트롤에 포커스를 요청합니다.
button1.Focus(); // button1에 포커스를 요청

// 현재 사용하고 있는 폼의 ActiveControl 속성을 사용해 포커스를 가질 컨트롤을 지정합니다.
this.ActiveControl = textBox1; // textBox1을 포커스를 가질 컨트롤로 지정

 

이 2가지 방법을 사용해 이전에 만든 예제를 활용해 포커스를 줘보도록 하겠습니다.

https://stickode.tistory.com/1132

 

숫자버튼과 연산자 버튼을 클릭할 때 이전에 버튼에 남아있던 포커스를 제거해보겠습니다.

// 숫자 버튼 클릭 메소드
private void NumBtn_Click(object sender, EventArgs e)
{
    Button btn = sender as Button;
    string inputNum = btn.Text.ToString();
    textBox1.Text += inputNum;

    if (num1turn)
    {
        num1 += inputNum;
    }
    else
    {
        num2 += inputNum;
    }

    if(operation != '\0')
    {
        lastOperation = operation;
        operation = '\0';
    }

    this.ActiveControl = null; // 포커스를 제거
}

// 연산자 버튼 클릭 메소드
private void OperationBtn_Click(object sender, EventArgs e)
{
    Button btn = sender as Button;
    if (String.IsNullOrEmpty(num1))
    {

    }
    else
    {

    }
    
    if (operation == '\0')
    {
        operation = btn.Text[0];
        textBox1.Text += operation;

        if (num1turn)
        {
            num1turn = false;
        }
    }
    else
    {
        textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1);

        operation = btn.Text[0];
        textBox1.Text += operation;
    }


    this.ActiveControl = null; // 포커스를 제거
}

 

그리고 = 버튼을 클릭했을 때 포커스를 텍스트 박스로 변경해보겠습니다.

// = 버튼 클릭 메소드
private void EquallBtn_Click(object sender, EventArgs e)
{
    double result = 0;
    if (num1.Length > 0 && num2.Length > 0)
    {
        switch (lastOperation)
        {
            case '+':
                result = double.Parse(num1) + double.Parse(num2);
                break;
            case '-':
                result = double.Parse(num1) - double.Parse(num2);
                break;
            case '*':
                result = double.Parse(num1) * double.Parse(num2);
                break;
            case '/':
                result = double.Parse(num1) / double.Parse(num2);
                break;
        }
    }

    num1 = textBox1.Text = result.ToString();
    num2 = "";
    num1turn = true;

    textBox1.Focus(); // 포커스를 텍스트박스로 이동
}

 

이렇게 코드를 수정하면 달라진 결과를 확인할 수 있습니다.

 

 

감사합니다.