Validatingイベントが原因でForm閉じれない?

解決


まり  2008-05-10 16:37:48  No: 144730  IP: 192.*.*.*

お世話になります。

フォームにTextBoxを貼り付け[X]閉じるボタンでフォームを終了する
プログラムをVB2005で作成しています。

TextBoxは数字のみの入力を許可し、以外の文字が入っていたらメッセージ
を出すようにしています、[X]閉じるボタンをクリックした時は、TextBox
の入力内容に関係なくフォームを終了したいのですが、方法がわかりま
せん...
いろいろ調べたのですが、[X]閉じるボタンは、Validating イベントの
タイミングで、ActiveControlが自分自身かどうかを判断しスルーすれば
できるということにたどり着き、以下のプログラムで解決出来ました。

Public Class Form1
    Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
        If IsNumeric(TextBox1.Text) = False And Me.ActiveControl IsNot TextBox1 Then
            e.Cancel = True
            MsgBox("数字以外の文字は入力できません。", MsgBoxStyle.Information, "")
        End If
    End Sub
End Class

今後は以下の様に、TextBoxを継承したカスタムコンポーネントを作成し、
フォームに貼り付け、使い回し出来ればと思います。

Public Class TextBoxNumericCheck
    Protected Overrides Sub OnValidating(ByVal e As System.ComponentModel.CancelEventArgs)
        MyBase.OnValidating(e)
        If IsNumeric(Me.Text) = False And Me.ActiveControl IsNot TextBox1 Then
            e.Cancel = True
            MsgBox("数字以外の文字は入力できません。", MsgBoxStyle.Information, "")
            Return
        End If
    End Sub
End Class

上記のMe.ActiveControl IsNot TextBoxの所がエラーになってしまいます、
カスタムコンポーネントでは書き方が全然違うのでしょうか?
TextBox1.Textの箇所はMe.Textに変更したらうまくいったのですが。

初歩的な質問ですいません、ご教授おねがいします。

編集 削除
やじゅ  2008-05-10 19:16:26  No: 144731  IP: 192.*.*.*

カスタムコンポーネント時のMeはカスタムコンポーネント自身
なので、Form1のActiveControlにしないと駄目です。

Me.FindForm().ActiveControl?

編集 削除
まり  2008-05-12 15:57:49  No: 144732  IP: 192.*.*.*

イメージ通りの動作をさせることができました。
やじゅさんありがとうございました。

編集 削除