問題描述:前幾天寫個小項目的時候,用到了一個父窗體,然後繼承過來的dategridview控制項不管是屬性還是事件都不能修改。 如下圖所示: 然後我就在網上找資料,但是有關這個問題的資源甚少,或許是我不會找,總之,我根據資料得出了三點東西: ①有關這個問題的論壇或者帖子大部分都是在十年之前的了,而且並 ...
問題描述:前幾天寫個小項目的時候,用到了一個父窗體,然後繼承過來的dategridview控制項不管是屬性還是事件都不能修改。
如下圖所示:
然後我就在網上找資料,但是有關這個問題的資源甚少,或許是我不會找,總之,我根據資料得出了三點東西:
①有關這個問題的論壇或者帖子大部分都是在十年之前的了,而且並沒有找出有效解決方法
②在這方面,簡單控制項繼承後是可以修改的,只要改成public,但複雜一點的控制項,比如本文所說的dategridview,許可權改成什麼都不行,他們說這是微軟故意設置的,也有的說這是微軟的一個bug
③然後有的說雖然控制面板是灰色的不能修改,但可以在後臺用代碼修改,這點不完全正確,不僅僅是用代碼,還得用到一個東西
總之,根據不斷的搗騰和討論,後面我們終於搞出來了,解決方法如下:
比如我想給控制項註冊一個雙擊單元格的事件,我們先在父窗體的dategridview(將許可權改為public)里直接去面板那裡點擊事件,然後就會進到後臺代碼:
如上圖而言,將原本的private改為public,然後多加一個virtual,沒錯,就是採用虛方法重寫的方式來達到在子類使用事件。
然後在子窗體里,面板依然是灰色的,不能用點擊的方式,我們可以直接在窗體的後臺代碼里直接寫
直接複製父窗體的空事件代碼,然後把virtual改成override,然後在代碼體裡面寫東西就行了。
經驗證,該方法是可行的