5.2 C# - Sender
01. 목표
01.1
5.1 XAML - C# EventHandler 에서 WPF 코드 비하인드(C# 코드)를 활용하여 컨트롤의 이벤트를 구현 했습니다.
이번에서는 WPF 코드 비하인드에서 C# 함수를 응용해 봅니다.
01.2
이전 포스트에서 작업했던 Calculator 예제를 이어갑니다. 이전 포스트 작업물이 없다면, Calculator 예제를 다운받고 확인합니다.
02. 이벤트 핸들러 응용하기(1)
02.1 숫자 버튼의 이벤트 핸들러 응용
![](https://blog.kakaocdn.net/dn/bP2Kik/btsKO5Ikps6/tS03Ih35xm8KcMK6oZbDKk/img.png)
① 계산기의 모든 버튼 클릭 이벤트는, 해당되는 숫자 값이 입력되는 구조입니다.
각각의 버튼에 동일한 입력 로직이 구현되어 있다고 가정하면, 차이점은 숫자 값만 다릅니다.
![](https://blog.kakaocdn.net/dn/7qISQ/btsKN5CFcRN/TDsMgHlQGWqn7UMEQW3Ik0/img.png)
데이터가 같고, 로직만 다르다면, 별도의 로직을 각각 구현할 이유가 없기 때문에, 로직이 중복되는 문제가 발생한다고 가정하고 이를 개선합니다.
![](https://blog.kakaocdn.net/dn/cxUcqm/btsKOLDjjgU/YksNtJGWwic0VjQIg0Yhe0/img.png)
② XAML의 모든 숫자(0~9) 버튼에 공통으로 적용할 로직 NumberButton_Click 이벤트 핸들러를 정의합니다.
기존 0~9 버튼에 동일한 로직이 구현되어 있고, 이를 NumberButton_Click 으로 대체한다고 가정합니다.
![](https://blog.kakaocdn.net/dn/dlgFtB/btsKOziPdE3/vnzcJWdJWSaclu4H8nfdJ1/img.png)
③ NumberButton_Click 이벤트 핸들러는 Click 이벤트에 등록되어야 합니다.
![](https://blog.kakaocdn.net/dn/cfGlfX/btsKOIUci2K/0ukEScdILkmUaxXSL8p6e0/img.png)
④ 기존 SevenButton_Click 이벤트 핸들러를 변경합니다.
03. 이벤트 핸들러 응용하기(2)
![](https://blog.kakaocdn.net/dn/lA8FQ/btsKOdmZmP2/sZk5RK5ZSc4zQK6W9AlGk1/img.png)
① 버튼 클릭 이벤트 핸들러 로직이, 모든 버튼에 동일하게 동작하도록 변경합니다.
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)
![](https://blog.kakaocdn.net/dn/cc1qIW/btsKM1gDAPg/sR0S0H7D1pNN0y0uoDdJKK/img.png)
① 버튼 클릭 이벤트 핸들러 로직을, 수정합니다.
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. 실행 결과 확인