2010-06-11 4 views
0

문제가 있습니다. 일부 wpf 버튼 만들기 동적 C# .i m 그것을 사용하여 지금은 모든 단추 클릭 이벤트를 찾으려고 루프. 나는 그것을 발견한다 그러나 동일하다 모든 단추에 동일하십시오 누르십시오 어떻게 모든 단추를 다품속으로 할 수 있습니까? 사전 shashank방법 CAn 버튼 클릭 차이 이벤트

`for (int i = 0; i < 2; i++) 
     { 
      Button b1 = new Button(); 
      //this.RegisterName("myAnimatedBrush", b1); 
      b1.Name = "button" + i;  
      b1.Height = 200; 
      b1.Width = 200; 
      b1.Margin = new Thickness(0, -100, 0, 0); 
      b1.HorizontalAlignment = HorizontalAlignment.Left; 
      b1.Content = "English"; 
      b1.Background = System.Windows.Media.Brushes.Pink; 
      b1.Click+=new RoutedEventHandler(b1_Click); 
      canvasbtn.Children.Add(b1); 
      Canvas.SetLeft(b1,b1.Width * i); 

     }` 
+3

키보드로 커피를 쏟은 것 같습니다. –

답변

0

에서

덕분에이 같은 뭔가를해야만 작동 할 수 있음.

protected void HandleBtnClick(object sender, EventArgs args) 
     { 
      Button btn = sender as Button; 
      if(btn==null){ 
       return; //This is not expected. 
      } 
      if(btn.Name=="button1") 
      { 
       DoFirstTask(); 
      } 
      else if (btn.Name == "button2") 
      { 
       DoSecondTask(); 
      } 
      ... 
     } 
+0

정말 고마워. – Shashank

+0

아야! 이 얼마나 악몽인가. SHASHANK의 "button1"등과 같은 버튼의 이름 지정은 좋지 않았습니다. 이름은 필요 없습니다. 그런 이름의 중첩 된 "if()"는 더욱 심각합니다. 적어도 스위치()로 만드십시오. 그리고 만약 당신이 btn == null을 처리한다면 그것은 예외를 던져야합니다! 나는 완전히 다른 압정을 잡아서 SHASHANK가 사용자가 볼 수있는 것 (색상, 내용 등)을 차별화하는 더 나은 디자인을 장려합니다. –

0
void b1_Click(object sender, RoutedEventArgs e) 
{ 
    Button srcButton = e.Source as Button; 
} 

Source & More

1

내 두 센트 :

당신이 다르게 작동 모든 루프에서 만든 버튼을 원하는 경우에, 자신을 버튼에 대해 다른 무엇을 생각하고 있는지 확인합니다. 예 :

  • 각 단추가 다른 데이터 항목에서 생성 된 경우 DataContext를 설정하고 원본 데이터 항목을 찾으려면이 단추를 사용하십시오.
  • 각 단추의 번호가 매겨진 경우 DataContext를 단추 번호로 설정하십시오.
  • 각 버튼의 의미가 다른 경우 클릭하여 다른 이벤트 핸들러로 설정하십시오. 이 배열을 만들 수 있습니다. 또는 CommandParameter로 각 버튼에 다른 객체를 첨부하십시오.

최종 사용자에게 중요한 내용을 바탕으로 행동을 구분하면 코드가 가장 의미가 있습니다.

예 :

for(int i=0; 0<10; i++) 
{ 
    var btn = new Button 
    { 
    DataContext = i, 
    Height = 200, Width = 200, 
    Margin=new Thickness(0, 100, 0 0), 
    }); 
    btn.Click += (sender, e) => 
    { 
    MessageBox.Show("You clicked button " + ((Button)sender).DataContext); 
    }; 
    dockPanel.Children.Add(btn); // Or you could use Canvas & Canvas.SetLeft 
} 

나는 당신이 강력하게이 대신 캔버스의 DockPanel을 사용하는 것이 추천 할 것입니다. 최종 사용자가 드래그 앤 드롭으로 임의의 위치 지정을해야하는 경우를 제외하고 Canvas는 거의 사용하기에 적합한 패널이 아닙니다. DockPanel을 사용하는 경우 왼쪽 좌표를 설정할 필요가 없습니다. 자동으로 수행됩니다.