728x90
728x170

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");

        }

 

 

728x90
그리드형
Posted by kjun
,