2011-10-25 167 views
1

Windows Froms DataGridView控件中的CellClick事件和SelectionChanged事件有什麼區別?DataGridView中的CellClick事件和SelectionChanged事件

什麼時候選擇更改事件運行:在表單加載事件之前或之後?

+1

你改變沒有點擊的選擇,例如通過使用鍵盤。 – svick

+0

也可以單擊單元格而不更改選擇。例如,點擊右鍵。 – mao

回答

6

這類問題的最佳參考是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 

而且也沒有選擇改變輸出到電網選擇改變(例如由電池點擊)

相關問題