c# 여러 비주얼 컴포넌트들을 하나의 이벤트 메떠드로 제어하기

아래의 코드는 두 개의 버튼들을 하나의 배열에 넣고 하나의 이벤트 메떠드로 제어하는 예제다. 리스트에 넣어도 된다.

Buttons[0].Click +=까지만 입력하고 탭 키를 누르면 이벤트 메떠드가 자동으로 만들어진다.

Button[] Buttons;

private void Form1_Load(object sender, EventArgs e)
{
    Buttons = new Button[] { button1, button2 };

    Buttons[0].Click += Buttons_Click;
    Buttons[1].Click += Buttons_Click;
}

private void Buttons_Click(object? sender, EventArgs e)
{
    Text = sender.ToString();
}

위의 코드를 실행하고 버튼을 클릭하면 button1나 button2가 출력된다. 그러나 아래의 코드는 다르다.

DataGridView[] DataGridViews;

private void Form1_Load(object sender, EventArgs e)
{
    DataGridViews = new DataGridView[] { dataGridView1, dataGridView2 };

    DataGridViews[0].Click += DataGridViews_Click;
    DataGridViews[1].Click += DataGridViews_Click;
}

private void DataGridViews_Click(object? sender, EventArgs e)
{
    Text = sender.ToString();
}

버튼의 경우와는 달리 그냥 DataGridView라고만 나온다. 따라서 두 개의 DataGridView들 가운데 어느 건지 모를 거 같다. 그러나 아래와 같이 해 보면 분명하게 구별이 된다.

private void DataGridViews_Click(object? sender, EventArgs e)
{
    if ((DataGridView)sender == dataGridView1)
    {
        Text = "1";
    }
    else
    {
        Text = "2";
    }
}