Integerとして定義された 1+16 列を持つDataTableにバインドされたDataGridViewがあります。
デフォルトのセル スタイルは 16 進数 2 桁 ( .Format="X2"
) です。
セル編集に入るときに、ユーザーに提供したいのは、値を 10 進数または 16 進数で書き込む機能です。
- 16 進数は、たとえば、0x00、0X01、x02、XFF のように記述できます。
- 0、1、2、15 などの 10 進数
このため、EditingControlShowingでは、TextBox の値に「0x」を追加します。
Private Sub BankGrid_EditingControlShowing(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs)
Dim grid As DataGridView = DirectCast(sender, DataGridView)
If Not TypeOf e.Control Is TextBox Then Return
Dim tb As TextBox = DirectCast(e.Control, TextBox)
tb.Text = "0x" & tb.Text
RemoveHandler tb.KeyPress, AddressOf TextBox_KeyPress
AddHandler tb.KeyPress, AddressOf TextBox_KeyPress
End Sub
TextBox_KeyPressサブでは、無効な入力を避けるためにすべての入力フィルタリングを実行します。
私が理解できないのは、編集が終了したときに検出するためにどのイベントに添付すればよいかということです。「0x」を削除できるように、 EditingControlShowingとは反対のものが欲しいのですが、見つかりませんでした。