VBでよく使う小技

VB.NETでコーディングする際によく使った小技を忘れないようにメモしておく。

フォームとかパネル上のコントロールでループをまわす。 テキストボックスを全部クリアするときとかに便利。 [vbnet] For Each Ctr As Control In Me.Controls 'For Each Ctr As Control In Panel1.Controls →パネル上のコントロールでまわす時 ' 名前に規則性を付けとくとこんなまわし方ができる If Ctr.Name Like "txt*" Then ' 数字しか入力させないなどのSubを関連付けるのに便利 AddHandler Ctr.Enter, AddressOf TextBoxGetFocusColor AddHandler Ctr.Leave, AddressOf TextBoxGetOriginalColor End If ' TypeOfを使うとコントロールの型を判断できる If TypeOf Ctr Is TextBox Then Ctr.Text = "" End If Next[/vbnet] Hashtableの使い方 VBというか、.NETFrameworkで使えるHashtable。ToDo:System.Collection以下を勉強。 [vbnet] ' Hashtableを作成 Dim Hash As New Hashtable Hash.Add("aaaaaaaa", 10000) Hash.Add("bbbbbbbb", 12000) Hash.Add("cccccccc", 13000) ' ハッシュテーブルの内容をキーと値を列挙 Dim Coll As ICollection = Hash.Keys Dim Enuml As IEnumerator = Coll.GetEnumerator While Enuml.MoveNext() Debug.WriteLine("キー : " & Enuml.Current.ToString()) Debug.WriteLine("値 : " & Hash(Enuml.Current).ToString()) End While[/vbnet]

キー : bbbbbbbb 値 : 12000 キー : cccccccc 値 : 13000 キー : aaaaaaaa 値 : 10000

フォーム上にF1ボタンとかがあって、キーボードのF1に動作を関連付けるとき 最初にフォームのKeyPreviewプロパティをTrueにしておく。 [vbnet] 'フォームKeyDownイベント Private Sub Form1_KeyDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.KeyEventArgs) _ Handles MyBase.KeyDown Select Case e.KeyCode Case Keys.F1 Call Btn_Fn1_Click(sender, e) End Select End Sub

Private Sub Btn_Fn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Btn_Fn1.Click ' F1が押下されたときの何らかの処理 End Sub[/vbnet] 名前空間の省略 文字列のユーティリティーとかをImportsするときに [vbnet]Imports SqlUtl = XXXX.YYYY.Util.SqlStrUtil[/vbnet] と書いておくと、 [vbnet]XXXX.YYYY.Util.SqlStrUtil.addQuot(000001)[/vbnet] を [vbnet]SqlUtl.addQuot(000001)[/vbnet] というふうに長い名前空間を省略して書ける。

Formのロード時にFocus()メソッドでフォーカスできない時 [vbnet]Me.ActiveControl = Me.txt_UserId[/vbnet] とか書いておくと、フォーカスできる。

そういえば、Webアプリケーションでこのチェックボタン(中間状態があるもの)は使ったこと無い。 [vbnet]Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load CheckBox1.ThreeState = True End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Select Case (CheckBox1.CheckState) Case CheckState.Checked MsgBox("チェックされています。") Case CheckState.Indeterminate MsgBox("中間の状態です。") Case CheckState.Unchecked MsgBox("未チェック状態です。") End Select End Sub[/vbnet]