#c# #winforms #events #datagridview
#c# #winforms #Мероприятия #datagridview
Вопрос:
В чем разница между событием CellClick и событием SelectionChanged в элементе управления DataGridView Windows из Windows?
И когда именно выполняется событие изменения выбора: до события загрузки формы или после?
Комментарии:
1. Вы меняете выделение без щелчка, например, с помощью клавиатуры.
2. Также вы можете щелкнуть ячейку без изменения выделения. Например, щелкните правой кнопкой мыши.
Ответ №1:
Лучшей ссылкой для такого рода вопросов является документация MSDN DataGridView .
Для события CellClick они говорят:
Это событие происходит, когда щелкают по любой части ячейки, включая границы и отступы. Это также происходит, когда пользователь нажимает и отпускает клавишу пробела, когда ячейка кнопки или ячейка флажка находится в фокусе, и будет происходить дважды для этих типов ячеек, если щелкнуть ячейку при нажатии клавиши пробела.
Для события SelectionChanged:
Это событие происходит всякий раз, когда ячейки выбираются или выбор отменяется, программно или действием пользователя. Например, это событие полезно, когда вы хотите отобразить сумму выбранных в данный момент ячеек.
Очевидное различие заключается в том, что щелчок по ячейке может сработать, даже если выделение в 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
Обратите внимание, что вы можете сделать так, чтобы измененный выбор срабатывал после события load, прикрепив его во время обработчика события DataBindingComplete .
dataGridView1.DataBindingComplete = new DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete);
void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
dataGridView1.SelectionChanged = new EventHandler(dataGridView1_SelectionChanged);
}
Теперь в окне вывода вы видите только:
Load
И нет измененного выбора, пока не будет изменен выбор сетки (например, щелчком по ячейке)