スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
vb.net DataGridViewのセルの編集モード設定


a_20140629193148d93.png

VisualStudioでDataGridViewを配置したとき、デフォルトで編集モードのプロパティ設定は「EditOnKeyStrokeOrF2」になってた。
これは、DGVのセルをクリックもしくは、F2キー押下で編集モードに突入しますよってことですよね。
これだと、複数セルに連続してデータを入力する際にいちいちクリックorF2キー押下という作業をする必要が生じます。

いちいち面倒なので、フォーカスが当たったら入力モードにするようにしました。

DGVのプロパティの「EditMode」を「EditOnEnter」に設定するだけで完了です。

aa.png

これで、前回の「Enterキー押下でTabキーと同じ動きに。」と併せて、入力完了→Enter→次の枠・・・という動きになりますね。

スポンサーサイト
vb.net 連番のついたコントロールを一括で操作する方法

同じコントロールが複数存在していて、同じような処理をするとき、


Me.TextBox1.Text = "aaa"
Me.TextBox2.Text = "bbb"
Me.TextBox3.Text = "ccc"

とか、同じような記述を繰り返しても目的は果たされるけど・・・
コントロールが100個あったら・・・?
似たような記述を100行書くの?
もしも、その機能でバグが出たら・・・100か所修正するの?

コード量が少ないほど、バグも少なくて済むし、テストも少なくて済む。と考えてます。
今回の連番のついたコントロールを一括で操作する方法なんて、初歩の初歩だとは思うけれども、
複数行の処理を数行で書くことができるんだから、使わない手はない。

1_20140625000434949.png


  'ボタン1押下時イベント
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim i As Integer

For i = 1 To 3

CType(Me.Controls("TextBoxEx" & i), TextBoxEx).Text = i

Next

End Sub


上記の書き方では、TextBoxExとしているけど、これは、TextBoxクラスを継承したクラスのことです。
Enterキー押下で、次のコントロールにフォーカスが移るようにしたTextBoxです。

詳しくは、先日の「vb.net EnterキーでTabキーと同じ動きに。継承
(説明は、DataGridViewで行っていますが、同じことです。)

今回の、連番のついたコントロールを一括で操作する方法について、
ほかにも書き方あるかもしれないけど、とりあえず今回はこれで。また何かあれば追記します。
vb.net EnterキーでTabキーと同じ動きに。継承

VisualStudioで開発を行う際に、DataGridViewを使用したとき、
複数の入力項目がある場合は、入力が完了してEnterキー押下で次の入力項目にフォーカスが遷移してくれると
使いやすい。

しかしながら、標準のDataGridViewには、そのような機能がない。
そんなときには、DataGridViewクラスを継承してあげましょう。

継承とは、もとからあるクラスの機能拡張みたいなものか・・・?
継承する際には、追加する機能だけを記述したらいいから、
記述するコードの中身自体は結構少ない。


'''
''' Enterキーが押された時に、Tabキーが押されたのと同じ動作をする
''' (現在のセルを隣のセルに移動する)DataGridView
'''

Public Class DataGridViewEx
Inherits DataGridView

System.Security.Permissions.SecurityAction.Demand, _
Window:=System.Security.Permissions.UIPermissionWindow.AllWindows)> _
Protected Overrides Function ProcessDialogKey( _
ByVal keyData As Keys) As Boolean
'Enterキーが押下された場合、Tabキーが押下されたようにする
If (keyData And Keys.KeyCode) = Keys.Enter Then
Return Me.ProcessTabKey(keyData)
End If
Return MyBase.ProcessDialogKey(keyData)
End Function

System.Security.Permissions.SecurityAction.Demand, _
Flags:=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)> _
Protected Overrides Function ProcessDataGridViewKey( _
ByVal e As KeyEventArgs) As Boolean
'Enterキーが押下された場合、Tabキーが押下されたようにする
If e.KeyCode = Keys.Enter Then
Return Me.ProcessTabKey(e.KeyCode)
End If
Return MyBase.ProcessDataGridViewKey(e)
End Function
End Class


継承のソースコードは出回っているけど、それをどこに記述して、どうしたら機能を使えるのか。
その辺分かっていないと、難しい。プログラミングの敷居が高く感じられるのも、
環境構築とかがよく分からないって点が多くを占めている気がする。(自分を含め)

とりあえず動いたのでメモ。
適当にclassファイルを作成して、上記のコードを記述した。
class1.png

リビルドしてから、レイアウト画面のツールボックスを見ると、出てきた。
先ほど機能を追加したDataGridViewがいた。
無題

Formに張り付けて、実行してみると、たしかにEnter押下でTabと同じ動きになった。

めでたしめでたし。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。