- PR -

vb.netとvb6のイベントについて

1
投稿者投稿内容
ゆうか
ベテラン
会議室デビュー日: 2004/04/01
投稿数: 62
投稿日時: 2004-04-11 16:24
vb.netとvb6のイベントについて
と書いているんですが、Buttonのイベントで悩んでます。

vb6では、コマンドボタンのGotFocusイベントでエラーチェックを
行い、エラーがある場合テキストボックス等にSetFocusすると
コマンドボタンのClickイベントは発生していませんでした。

vb.netでは、このときButtonのClickイベントが発生します。

これはvb6とvb.netの仕様の違いなんでしょうか?
分かる方、いらっしゃらないでしょうか?
ant
常連さん
会議室デビュー日: 2004/03/24
投稿数: 44
投稿日時: 2004-04-11 17:30
VB.NET(.NET Frameworkでは)通常GotFocusイベントの前にEnterイベントが発生します。
従って、Enterイベントで行えば大丈夫です。
但し、テキストボックス等にエラーとなる文字列が書き込まれた時点、若しくはテキストボックス等がフォーカスを失った時点でチェックすることも考えられます。
ゆうか
ベテラン
会議室デビュー日: 2004/04/01
投稿数: 62
投稿日時: 2004-04-11 18:38
すみません、GotFocusイベントの代わりにEnterイベントを
使ってはいるんですがClickイベントが発生しています。
ただし、ActiveControlはテキストボックスに移っているようです。
それで判断すれば問題ないのでしょうか?
ant
常連さん
会議室デビュー日: 2004/03/24
投稿数: 44
投稿日時: 2004-04-11 19:46
ゆうかさんがどのような環境なのか分からないので、なんとも言えませんが、
当方は以下の環境でテストしてみました。

Visual Stuio .NET 2003
.NET Framework 1.1
VB.NET

フォームを一つ用意して、そこにボタンコントロールとテキストボックスを配置し、
以下のコードを付け加えました。

コード:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
                System.EventArgs) Handles Button1.Click
        MessageBox.Show("Button1_Click")
    End Sub



    Private Sub Button1_Enter(ByVal sender As Object, ByVal e As
                System.EventArgs) Handles Button1.Enter
        If TextBox1.Text = "" Then
            MessageBox.Show("値を入力しましょう")
            TextBox1.Focus()
        End If
    End Sub



テキストボックスになんらかの文字列が代入されている場合はButton1_Clickのイベントが
発生しますが、何も代入せずボタンを押下しようとすると、クリックイベントは発生
せず、テキストボックスにフォーカスが移ります。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-04-12 10:01
そのボタンというのは、ある処理(以降処理Aと呼ぶ)をすることを指示するためにあるんですよね。
で、処理Aをする前に、テキストボックスに入力された内容の正当性をチェックしなければならないわけですね?
それならボタンのClick時の処理の中で、まずチェックをしてから処理Aを行ってください。
フォーカスは関係ありません。

フォーカスをはずすとClickが起こるとか起こらないとかいうのはマイクロソフトが用意したButtonクラスの動作の話ですので、もしこのプログラムを別のバージョンのフレームワーク上で動かすことになった場合に正しく動かなくなったりしませんか。
あるいは処理Aを別のトリガー(ネットワークを介して別マシンからの指示で、タイマーで一定間隔で、等)で引き起こすことになった場合にはフォーカスがどうこうというのは意味がないですよね。
1

スキルアップ/キャリアアップ(JOB@IT)