DataGridViewのカスタムコントロールのビルドエラーについて

実現したいこと

https://teratail.com/questions/iz38sxqefzlx0z
↑の質問にて、C#でDataGridViewの編集中セルのEnterでのセル移動を制御するために
カスタムコントロールを作りました。

VB.NETでも同様のことをしたいのですが、エラー一覧にエラーは表示されませんが、
デバッグを実行すると「ビルドエラーが発生しました。続行して、最後に成功したビルドを実行しますか?」
のメッセージが表示されます。

正しいコードがわかりましたら教えて頂きたいです。

出力 を見ると、デバッグ実行時に以下の表示が出ています。

発生している問題・エラーメッセージ

1. error BC30928: クラス 'DataGridViewEX' に指定された基本クラス 'DataGridView' は、その他の Partial 型の 1 つである基本クラス 'Control' と異なることはできません。 2. error BC30284: 基底クラスで function をオーバーライドしないため、function 'ProcessDataGridViewKey' を 'Overrides' として宣言することはできません。

該当のソースコード

VB.NET

1Imports System.ComponentModel 2 3Public Class DataGridViewEX 4 Inherits DataGridView 5 6 Public Sub New() 7 InitializeComponent() 8 End Sub 9 10 Public Event PressEnter As EventHandler(Of CancelEventArgs) 11 12 <System.Security.Permissions.UIPermission(System.Security.Permissions.SecurityAction.Demand, Window:=System.Security.Permissions.UIPermissionWindow.AllWindows)> 13 Protected Overrides Function ProcessDialogKey(ByVal keyData As Keys) As Boolean 14 If (keyData And Keys.KeyCode) = Keys.Enter Then 15 16 If Not OnPressEnter() Then 17 Return MyBase.ProcessDialogKey(keyData) 18 Else 19 Return True 20 End If 21 End If 22 23 Return MyBase.ProcessDialogKey(keyData) 24 End Function 25 26 <System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand, Flags:=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)> 27 Protected Overrides Function ProcessDataGridViewKey(ByVal e As KeyEventArgs) As Boolean 28 If e.KeyCode = Keys.Enter Then 29 30 If Not OnPressEnter() Then 31 Return MyBase.ProcessDataGridViewKey(e) 32 Else 33 Return True 34 End If 35 End If 36 37 Return MyBase.ProcessDataGridViewKey(e) 38 End Function 39 40 Private Function OnPressEnter() As Boolean 41 If PressEnterEvent IsNot Nothing Then 42 Dim e As CancelEventArgs = New CancelEventArgs() 43 RaiseEvent PressEnter(Me, e) 44 Return e.Cancel 45 End If 46 47 Return False 48 End Function 49 50 Protected Overrides Sub OnPaint(ByVal pe As PaintEventArgs) 51 MyBase.OnPaint(pe) 52 End Sub 53End Class

試したこと

・4行目のInherits DataGridViewを Inherits Controlに変更

ビルド時の出力に表示される1.のエラーは表示されなくなりますが、
17行目と23行目のProcessDataGridViewKeyに対して
エラー BC30456 'ProcessDataGridViewKey' は 'Control' のメンバーではありません。
というエラーがエラー一覧に表示されます。

・13行目と27行目のProtected Overrides のOverridesを削除

ビルド時の出力に表示される2.のエラーは表示されなくなりますが、

警告 BC40005 function 'ProcessDialogKey' は、ベース class 'DataGridView' のオーバーライド可能なメソッドをシャドウします。ベース メソッドをオーバーライドするには、このメソッドは 'Overrides' に宣言されていなければなりません。
という警告がエラー一覧に表示されます。

コメントを投稿

0 コメント