Событие CellClick и событие SelectionChanged в DataGridView - PullRequest
1 голос
/ 25 октября 2011

В чем разница между событием CellClick и событием SelectionChanged в элементе управления Windows Froms DataGridView?

А когда именно происходит изменение события выбора: до события загрузки формы или после?

1 Ответ

6 голосов
/ 25 октября 2011

Лучшим справочным материалом для такого рода вопросов является документация MSDN DataGridView.

Для события CellClick они говорят:

Это событие происходит, когда любойщелкается часть ячейки, включая границы и отступы.Это также происходит, когда пользователь нажимает и отпускает клавишу ПРОБЕЛ, когда ячейка кнопки или ячейка флажка находится в фокусе, и будет происходить дважды для этих типов ячеек, если щелкнуть ячейку при нажатии клавиши ПРОБЕЛ.

Для события SelectionChanged :

Это событие происходит всякий раз, когда выбираются ячейки или выбор отменяется, программно или по действию пользователя.Например, это событие полезно, когда вы хотите отобразить сумму выбранных ячеек.

Очевидное отличие состоит в том, что CellClick может запускаться, даже если выбор DataGridView не изменяется, например, сщелкните правой кнопкой мыши или при нажатии на выбранную ячейку.Кроме того, выбор может изменяться без нажатия на ячейку, например, когда вы изменяете выбор программно.

Что касается того, когда именно событие изменения изменения запускается относительно события загрузки формы, когда оно присоединено в конструкторе формыэто раньше (и несколько раз!).

Я только что доказал это себе с помощью следующего кода:

public Form1()
{
    InitializeComponent();

    MyBindingList<BackingObject> backing_objects = new MyBindingList<BackingObject>();
    backing_objects.Add(new BackingObject{ PrimaryKey = 1, Name  = "Fred", Hidden = "Fred 1"});          

    dataGridView1.DataSource = backing_objects;

    this.Load += new EventHandler(Form1_Load);
    dataGridView1.SelectionChanged += new EventHandler(dataGridView1_SelectionChanged);
}

void Form1_Load(object sender, EventArgs e)
{
    Console.WriteLine("Load");
}

void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
    Console.WriteLine("Selection Changed");            
}

Окно вывода показывает:

Selection Changed
Selection Changed
Selection Changed
Load

Обратите внимание, что вы можете изменить выбор, выбрав после события загрузки, прикрепив его во время обработчика событий DataBindingComplete.

dataGridView1.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete);

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    dataGridView1.SelectionChanged += new EventHandler(dataGridView1_SelectionChanged);
}

Теперь в окне вывода вы видите только:

Load

И вывод выбора не изменяется, пока не будет изменен выбор сетки (например, щелчком по ячейке)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...