2011-04-06 4 views
4

내용 1, 2, 3, 4, 5 ...와 같은 여러 개의 단추가 있습니다. 모든 버튼은 동일한 기능을 사용합니다 이벤트를 클릭하십시오.WPF 여러 단추 사이에있는 현재 단추를 확인하는 방법

<Button Content="1" Height="30" Name="button1" Width="30" Click="calculate"/> 
<Button Content="2" Height="30" Name="button2" Width="30" Click="calculate"/> 
<Button Content="3" Height="30" Name="button3" Width="30" Click="calculate"/> 
<Button Content="4" Height="30" Name="button4" Width="30" Click="calculate"/> 
<Button Content="5" Height="30" Name="button5" Width="30" Click="calculate"/> 

어떻게 계산 기능을 누르면되는 버튼을 알 수 있을까? 누른 버튼에서 내용을 가져오고 싶습니다.

private void calculate(object sender, RoutedEventArgs e) 
     { 

     } 

감사합니다.

답변

11

당신은 당신의 기능이를 사용하여 콘텐츠 속성을 얻을 수 있습니다 - 당신이 당신의 버튼에 대한 귀하의 XAML에 Name 또는 x:Name 속성을 배치하면 당신이 다음하지 않고() 네이티브 object.Equals를 사용할 수

string content = (sender as Button).Content.ToString(); 
+0

@RV : 감사합니다. 하지만 그것은 나에게 타입 캐스팅 오류를주고있다. 우리는 (Button으로 보낸 사람) 사용해야합니다 .Content.ToString(); – KillerFish

+0

그래, 그 부분 잊어 버려 .. !! Content 속성은 객체 유형을 반환하므로 문자열로 변환해야합니다. –

+0

null 참조 오류가 발생했습니다 –

1

던지기 또는 되풀이하기. 이렇게하면 코드를 두 번 수정하지 않아도되고 컨트롤의 Content이 변경 될 때 두 곳에서 편집하는 것을 잊어 버리는 것을 방지 할 수 있습니다.

을 감안할 때

<Button Name="btnOne" ... /> 
<Button Name="btnTwo" ... /> 

다음

나는 버튼의 툴팁 속성에 객체를 부착하여이 문제를 해결하는 경향이
if (sender.Equals(btnOne)) {...} 
if (sender.Equals(btnTwo)) {...} 
+0

이것은 XAML에서'xmlns : x = "http://schemas.microsoft.com/winfx/2006/xaml"'로 가정합니다. XAML 컨트롤과 이벤트 처리기는 같은 클래스에 속해 있다고 가정합니다. – ergohack

0

. 그런 다음이처럼 돌아갈 수는 UI에 툴팁 텍스트를 표시하고 클릭 핸들러에서 액세스 할 수있는 아이디를 만드는

 
     public class TT 
     { 
      public int Id { get; set; } 
      public string Text { get; set; } 
      public override string ToString() 
      { 
       return Text; 
      } 
     } 

:

 
void EditMe(object sender, RoutedEventArgs e) 
{ 
    Button x = sender as Button; 

    if (x != null) 
    { 
     int id = (x.ToolTip as TT).Id; 
    } 
} 

이 예에서 TT 객체는 것 같습니다.

관련 문제