我有一個DataGridView設置爲EditOnF2。我在CellEndEdit事件處理程序中對數據進行了一些特殊處理,以設置單元格的值。我仍然希望EditOnKeystrokeOrF2的功能在Esc鍵被按下時恢復到原始值。不幸的是,在CellEndEdit事件處理程序中,我沒有看到一種方法來告訴是什麼導致CellEndEdit事件被觸發。如果沒有按下Esc鍵,我只想更改單元格的值。我怎麼知道它是否是?如何捕獲在C#中的DataGridView上觸發「CellEndEdit」的擊鍵?
編輯:值得注意的是,當單元格被編輯時,KeyDown事件不會被觸發,也不會導致最終的結尾鍵擊。編輯2:我已經嘗試了KeyPreview的建議,但窗體仍然沒有捕獲被按下的退出鍵。
編輯3:我一直在試圖讓這個工作。我最初將以下內容中的一部分作爲單獨的帖子發佈,但感覺它可能更適合將其包含在此處。
我在DataGridView中有一個單元,它現在被設置爲EditProgrammatically。要捕獲開始編輯的擊鍵,我將cell.Value設置爲等於擊鍵。但是,這會遺失單元格的「Escape」功能 - 當您按下換碼時,而不是恢復到原始值時,它將恢復爲以編程方式插入單元格的按鍵。
我相信如果我可以在單元格上設置「EditedFormattedValue」,這將是我想要放置我的擊鍵值的位置,但是這看起來是隻讀的。我怎樣才能完成我所嘗試的?
舉例說明:如果單元格中的值爲「54.3」,並按下「9」鍵,它將開始編輯單元格並在其中放置「9」。如果我點擊Escape,而不是回到「54.3」,它會回到「9」。我想要的是它恢復到原來的「54.3」值。
所以,我試圖從開始和結束兩個方面來解決這個問題。我認爲真正的問題是我覆蓋了原來的價值,無法確定我是否應該恢復原狀。編輯4:它看起來像CellValidating可能值得使用,但是當我嘗試使用它時,我看到了奇怪的行爲。在一個新項目中,我創建了DataGridView並註冊了各種事件,並且發現CellEndEdit在CellEndEdit之前被觸發。然而,在我試圖讓這個工作起來的項目中,CellEndEdit正在發射CellValidating。任何想法可能是什麼區別?
謝謝,但嘗試此方法後,它看起來像Escape鍵仍然只能被單元格識別爲編輯的結尾,而不是表單上的實際KeyDown或KeyPress事件。 – 2009-04-22 14:01:48