2011-12-13 55 views
4

我使用DataGridView從DataTable獲取數據來編輯一些數據量。一切似乎都沒問題,但有一些不便之處。當用戶開始編輯單元格時,該單元格的文本會自動變爲選中狀態,光標將移動到單元格文本的末尾。 我想在用戶開始編輯單元格文本時以編程方式將光標(插入符號)放到編輯單元格中文本的開頭。 我試過了:如何在用戶編輯單元格文本時以編程方式編輯DataGridView單元格中的光標到文本的開頭?

private void gridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
    { 
     DataGridViewTextBoxEditingControl dText = (DataGridViewTextBoxEditingControl)e.Control; 
     dText.Select(0, 0); 
    } 

這不行。此外,我試圖取消選擇CellBeginEdit中的文本 - 也沒有結果。

回答

8

我會期待你做了什麼工作。但是DataGridView是一個複雜的控件,具有許多事件,並且通常不會直觀地工作。看起來,當EditingControlShowing事件發生時,控件還沒有被初始化,所以你不能影響它。當事件發生時,控件甚至還沒有創建。

應該有,可能是一個更好的方式來做到這一點,但我得到了它的使用CellEnter事件工作:

private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e) 
{ 
    if (dgv.CurrentCell.EditType == typeof(DataGridViewTextBoxEditingControl)) 
    { 
     dgv.BeginEdit(false);    
     ((TextBox)dgv.EditingControl).SelectionStart = 0; 
    } 
} 

所以當進入小區我只是去直接進入編輯模式,但我通過falseBeginEdit(),告訴它不要選擇任何文本。現在編輯控件已完全初始化,我可以將SelectionStart設置爲零以將光標移動到文本的開頭。

如果單元格不是文本框,那麼我什麼都不做。

如果你願意,你可以做

dgv.EditMode = DataGridViewEditMode.EditProgrammatically; 

,讓你有編輯開始時完全控制,但我覺得這是沒有必要的。

+0

我試過這個解決方案,它是工作!謝謝! – Alexander 2011-12-15 14:31:44

相關問題