お世話になります。
フォームに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に変更したらうまくいったのですが。
初歩的な質問ですいません、ご教授おねがいします。
カスタムコンポーネント時のMeはカスタムコンポーネント自身
なので、Form1のActiveControlにしないと駄目です。
Me.FindForm().ActiveControl?
イメージ通りの動作をさせることができました。
やじゅさんありがとうございました。