Windows Froms DataGridView控件中的CellClick事件和SelectionChanged事件有什麼區別?DataGridView中的CellClick事件和SelectionChanged事件
什麼時候選擇更改事件運行:在表單加載事件之前或之後?
Windows Froms DataGridView控件中的CellClick事件和SelectionChanged事件有什麼區別?DataGridView中的CellClick事件和SelectionChanged事件
什麼時候選擇更改事件運行:在表單加載事件之前或之後?
這類問題的最佳參考是MSDN DataGridView文檔。
對於CellClick事件,他們說:
當點擊一個細胞的任何部位,包括 邊框和填充時發生此事件。當用戶按下並釋放空格鍵 而按鈕單元格或複選框單元格具有焦點時,也會發生這種情況,如果單元格被單擊,則 將出現兩次,而 則按下SPACE鍵。
對於SelectionChanged事件:
每當細胞選擇或選擇是 取消,是否編程或通過用戶動作發生此事件。例如, 當您想要顯示當前選定單元格的 的總和時,此事件很有用。
顯而易見的區別是,即使DataGridView選擇沒有改變,例如右鍵單擊或單擊當前選定的單元格時,CellClick也會觸發。此外,選擇可以在沒有單擊單元的情況下更改,例如,當您以編程方式更改選擇時。
至於何時確切地選擇更改事件是相對於窗體加載事件運行,當附加在窗體構造函數時它是之前(和幾次在那!)。
我只是證明給我自己用下面的代碼:
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
而且也沒有選擇改變輸出到電網選擇改變(例如由電池點擊)
你改變沒有點擊的選擇,例如通過使用鍵盤。 – svick
也可以單擊單元格而不更改選擇。例如,點擊右鍵。 – mao