5.2 C# - Sender
01. 목표
01.1
5.1 XAML - C# EventHandler 에서 WPF 코드 비하인드(C# 코드)를 활용하여 컨트롤의 이벤트를 구현 했습니다.
이번에서는 WPF 코드 비하인드에서 C# 함수를 응용해 봅니다.
01.2
이전 포스트에서 작업했던 Calculator 예제를 이어갑니다. 이전 포스트 작업물이 없다면, Calculator 예제를 다운받고 확인합니다.
02. 이벤트 핸들러 응용하기(1)
02.1 숫자 버튼의 이벤트 핸들러 응용
① 계산기의 모든 버튼 클릭 이벤트는, 해당되는 숫자 값이 입력되는 구조입니다.
각각의 버튼에 동일한 입력 로직이 구현되어 있다고 가정하면, 차이점은 숫자 값만 다릅니다.
데이터가 같고, 로직만 다르다면, 별도의 로직을 각각 구현할 이유가 없기 때문에, 로직이 중복되는 문제가 발생한다고 가정하고 이를 개선합니다.
② XAML의 모든 숫자(0~9) 버튼에 공통으로 적용할 로직 NumberButton_Click 이벤트 핸들러를 정의합니다.
기존 0~9 버튼에 동일한 로직이 구현되어 있고, 이를 NumberButton_Click 으로 대체한다고 가정합니다.
③ NumberButton_Click 이벤트 핸들러는 Click 이벤트에 등록되어야 합니다.
④ 기존 SevenButton_Click 이벤트 핸들러를 변경합니다.
03. 이벤트 핸들러 응용하기(2)
① 버튼 클릭 이벤트 핸들러 로직이, 모든 버튼에 동일하게 동작하도록 변경합니다.
private void NumberButton_Click(object sender, RoutedEventArgs e)
{
int selectedBtnValue = 0;
if (sender == zeroButton)
selectedBtnValue = 0;
else if (sender == oneButton)
selectedBtnValue = 1;
else if (sender == twoButton)
selectedBtnValue = 2;
else if (sender == threeButton)
selectedBtnValue = 3;
else if (sender == fourButton)
selectedBtnValue = 4;
else if (sender == fiveButton)
selectedBtnValue = 5;
else if (sender == sixButton)
selectedBtnValue = 6;
else if (sender == sevenButton)
selectedBtnValue = 7;
else if (sender == eightButton)
selectedBtnValue = 8;
else if (sender == nineButton)
selectedBtnValue = 9;
if (resultLabel.Content.ToString() == "0")
{
resultLabel.Content = $"{selectedBtnValue}";
}
else
{
resultLabel.Content = $"{resultLabel.Content}{selectedBtnValue}";
}
}
04. 이벤트 핸들러 응용하기(3)
① 버튼 클릭 이벤트 핸들러 로직을, 수정합니다.
private void NumberButton_Click2(object sender, RoutedEventArgs e)
{
//Sender 객체가 버튼인 경우, 버튼 객체에 .(닷 연산자)를 사용해 컨텐츠 속성을 가져와 int로 변환 후 저장
//_ diacard 변수는 값을 반환하더라도, 사용할 일이 없기에 안전하게 버려도 됨을 나타낸다.
_ = int.TryParse(((Button)sender).Content.ToString(), out int selectedBtnValue);
if (resultLabel.Content.ToString() == "0")
{
resultLabel.Content = $"{selectedBtnValue}";
}
else
{
resultLabel.Content = $"{resultLabel.Content}{selectedBtnValue}";
}
}
05. 실행 결과 확인