KeiStory

WPF Panel 내의 모든 Button 에 동일 이벤트 적용하기

 

Panel 안의 모든 Button 에 같은 이벤트를 적용하는 방법입니다.

우선 각각 버튼에 이벤트를 주는 경우는 아래와 같습니다.

        public MainWindow()
        {
            InitializeComponent();
 
            StackPanel stack = new StackPanel();
            Content = stack;
            Random rand = new Random();
            for (int i = 0; i < 10; i++)
            {
                Button btn = new Button();
                btn.Name = ((char)('A' + i)).ToString();
                btn.FontSize += rand.Next(10);
                btn.Content = "Button " + btn.Name + " says 'Click me'";
                btn.Click += ButtonOnClick;
                stack.Children.Add(btn);
            }
        }
 
        void ButtonOnClick(object sender, RoutedEventArgs args)
        {
            Button btn = args.Source as Button;
            MessageBox.Show("Button " + btn.Name + " has been clicked", "Button Click");
        }

 

AddHandler 와 RoutedEventHandler 를 사용해 아래 처럼 하면 위 처리한 방식과 같은 처리가 가능합니다.

* 모든 버튼의 ClickEvent 를 하나의 이벤트(ButtonOnClick)로 연결시켜줍니다.

        public MainWindow()
        {
            InitializeComponent();
 
            StackPanel stack = new StackPanel();
            Content = stack;
            Random rand = new Random();
            for (int i = 0; i < 10; i++)
            {
                Button btn = new Button();
                btn.Name = ((char)('A' + i)).ToString();
                btn.FontSize += rand.Next(10);
                btn.Content = "Button " + btn.Name + " says 'Click me'";
                stack.Children.Add(btn);
            }
 
            stack.AddHandler(Button.ClickEvent, new RoutedEventHandler(ButtonOnClick));
        }
 
        void ButtonOnClick(object sender, RoutedEventArgs args)
        {
            Button btn = args.Source as Button;
            MessageBox.Show("Button " + btn.Name + " has been clicked", "Button Click");
        }
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band