C# CellClick事件并在DataGridView中选择Changed事件

C# CellClick事件并在DataGridView中选择Changed事件,c#,winforms,events,datagridview,C#,Winforms,Events,Datagridview,Windows Froms DataGridView控件中的CellClick事件和SelectionChanged事件之间有什么区别 选择更改事件具体在什么时候运行:在表单加载事件之前还是之后?这类问题的最佳参考是MSDN DataGridView文档 对于这次活动,他们说: 单击单元格的任何部分时发生此事件,包括 边框和填充。当用户按下并释放时,也会发生这种情况 按钮单元格或复选框单元格具有焦点时空格键,以及 如果在单击单元格时单击该单元格,则这些单元格类型将发生两次 按空格键 本次活动:

Windows Froms DataGridView控件中的CellClick事件和SelectionChanged事件之间有什么区别


选择更改事件具体在什么时候运行:在表单加载事件之前还是之后?

这类问题的最佳参考是MSDN DataGridView文档

对于这次活动,他们说:

单击单元格的任何部分时发生此事件,包括 边框和填充。当用户按下并释放时,也会发生这种情况 按钮单元格或复选框单元格具有焦点时空格键,以及 如果在单击单元格时单击该单元格,则这些单元格类型将发生两次 按空格键

本次活动:

无论何时选择单元格或选择被取消,都会发生此事件 已取消,无论是通过编程方式还是通过用户操作。例如 当您希望显示当前事件的总和时,此事件非常有用 选定的单元格

明显的区别是,即使DataGridView选择没有更改,CellClick也可以触发,例如,右键单击或单击当前选定的单元格。此外,选择也可以在不单击单元格的情况下更改,例如,通过编程更改选择时

至于与表单加载事件相关的selection changed事件的确切运行时间,当附加到表单构造函数中时,它就在前面(并且多次如此!)

我只是用以下代码向自己证明了这一点:

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");            
}
请注意,您可以通过在DataBindingComplete事件处理程序期间附加选项,在加载事件之后更改选择

dataGridView1.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete);

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    dataGridView1.SelectionChanged += new EventHandler(dataGridView1_SelectionChanged);
}
现在,在输出窗口中,您只能看到:

Load

在网格选择发生更改(例如,通过单元格单击)之前,没有选择更改的输出。

这类问题的最佳参考是MSDN DataGridView文档

对于这次活动,他们说:

单击单元格的任何部分时发生此事件,包括 边框和填充。当用户按下并释放时,也会发生这种情况 按钮单元格或复选框单元格具有焦点时空格键,以及 如果在单击单元格时单击该单元格,则这些单元格类型将发生两次 按空格键

本次活动:

无论何时选择单元格或选择被取消,都会发生此事件 已取消,无论是通过编程方式还是通过用户操作。例如 当您希望显示当前事件的总和时,此事件非常有用 选定的单元格

明显的区别是,即使DataGridView选择没有更改,CellClick也可以触发,例如,右键单击或单击当前选定的单元格。此外,选择也可以在不单击单元格的情况下更改,例如,通过编程更改选择时

至于与表单加载事件相关的selection changed事件的确切运行时间,当附加到表单构造函数中时,它就在前面(并且多次如此!)

我只是用以下代码向自己证明了这一点:

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");            
}
请注意,您可以通过在DataBindingComplete事件处理程序期间附加选项,在加载事件之后更改选择

dataGridView1.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete);

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    dataGridView1.SelectionChanged += new EventHandler(dataGridView1_SelectionChanged);
}
现在,在输出窗口中,您只能看到:

Load

只有更改网格选择(例如,通过单元格单击)后,才会有选择更改的输出。

您可以在不单击的情况下更改选择,例如使用键盘。您也可以在不更改选择的情况下单击单元格。例如,使用右键单击。您可以在不单击的情况下更改选择,例如使用键盘。您也可以在不更改选择的情况下单击单元格。例如,用右键单击。