社員ブログ
HOME  社員ブログ

.net修行中15

2013年02月20日 17時08分28秒

13.02.20 .net修行中15

こんにちは、モンクです。

vb.netでは、複数のイベントを一つのメソッドに関連付けることができます。

例えば「Productテキストボックスと、Priceテキストボックスがあり、
それぞれフォーカスしたら、値を選択状態にする」場合、、、

①.net以前

<br />
Public Class Form1</p>
<p>    Private Sub txtProduct_Enter(sender As Object, e As EventArgs) Handles txtProduct.Enter<br />
        txtProduct.SelectAll()<br />
    End Sub</p>
<p>    Private Sub txtPrice_Enter(sender As Object, e As EventArgs) Handles txtPrice.Enter<br />
        txtPrice.SelectAll()<br />
    End Sub<br />
End Class<br />


②.net
<br />
Public Class Form1</p>
<p>    Private Sub txtProduct_Enter(sender As Object, e As EventArgs) Handles txtProduct.Enter, txtPrice.Enter '←イベントをカンマで繋いで書くことができる<br />
        txtProduct.SelectAll()<br />
    End Sub<br />
End Class<br />


こうすると複数のイベントに対し、同じ処理を何度も書かなくてよいので良いですね。
しかし②の場合、実際このままではProductとPriceどちらのイベントから発生したのかわかりません。そこで、、、

③実際に使うとすれば
<br />
Public Class Form1<br />
    Private Sub txtProduct_Enter(sender As Object, e As EventArgs) Handles txtProduct.Enter, txtPrice.Enter</p>
<p>        ' senderをTextBoxに変換し、イベント発生元のコントロール名を取る<br />
        Dim ctlNmAs String = CType(sender, TextBox).Name</p>
<p>        ' イベント発生元のコントロール名で制御して処理する<br />
        Select Case ctlNm<br />
            Case txtProduct.Name<br />
                txtProduct.SelectAll()<br />
            Case txtPrice.Name<br />
                txtPrice.SelectAll()<br />
        End Select<br />
    End Sub<br />
End Class<br />


「入力可能文字は数字のみ」のように入力制限をかける場合、
イベントをキャンセル(e.Handled = True)するだけなので処理分岐は必要ありませんから、
そのような処理に効力を発揮するでしょう。

参考:http://blog.livedoor.jp/akf0/archives/50870126.html

今回はレポートから離れた記事でしたが、実際はまだレポートに苦しんでいます。

.NET, VB.NET, 社員:モンク, 開発言語, 雑記

  1. コメントはまだありません
  1. トラックバックはまだありません