DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Validatingとフォームの閉じるボタンについて

環境/言語:[VS2003]
分類:[.NET]

初めまして、AE101と申します。
過去ログのID:6170 でも取り扱っている内容についてですが、
どのようにプログラムに組込んだらいいのか分かりません。
恐れ入りますが皆様教えてくださいませ。

内容は、テキストボックスのValidatingイベントに必須チェックロジックを組込んでいます。未入力ならMsgBoxを表示としています。
ユーザが未入力の状態でフォームの閉じる(×ボタン)をマウスでクリックすると、MsgBoxが表示されてしまいます。
フォームを閉じる時はこの処理を制御するにはどうしたらいいのでしょうか?
こんにちは、じゃんぬ です。

■No12400に返信(AE101さんの記事)
> 過去ログのID:6170 でも取り扱っている内容についてですが、
> どのようにプログラムに組込んだらいいのか分かりません。
> フォームを閉じる時はこの処理を制御するにはどうしたらいいのでしょうか?

そちらで出ている回答のままになっちゃうので、結局無意味かもしれませんが、

Private Sub txtHoge_Validating(...) Handles txtHoge.Validating
    If Me.ActiveControl Is Me.txtHoge Then
        Return
    End If

    '/ TODO : ここに検証コードを挿入してください。
End Sub

こんなガード句を毎回書くのがつらいのであれば、カスタム コントロールを作りましょう。
カスタム コントロールを使って、自作の MyValidate イベントを発生させる場合はこうなります。

Public Class ExTextBox
    Inherits System.Windows.Forms.TextBox

#Region " イベントの定義 "

    Public Event MyValidate(ByVal sender As Object...

#End Region

#Region " Me.Validating イベント "

    Private Sub ExControl_Validating(...) Handles MyBase.Validating
        If Me.FindForm().ActiveControl Is Me = False Then
            RaiseEvent MyValidate(sender, e)
        End If
    End Sub

#End Region

End Class
ありがとうございます。じゃんぬさん。
RaizeEventの方をぜひともやってみたいのですが
このようにコードをかきましたが、うまくうごきません。

Public Class Form1
Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating

Call MsgBox("AAAA")

End Sub
End Class
Public Class ExTextBox
Inherits System.Windows.Forms.Form

#Region " イベントの定義 "

Public Event MyValidate(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)

#End Region

#Region " Me.Validating イベント "

Private Sub ExControl_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Validating
If Me.FindForm().ActiveControl Is Me = False Then
RaiseEvent MyValidate(sender, e)
End If
End Sub

#End Region

お手数おかけしますが教えてくださいませ。
Inherits System.Windows.Forms.Form
↓↓↓↓↓↓↓
Inherits System.Windows.Forms.TextBox
に変更しても動作しませんでした。
こんにちは、じゃんぬ です。

■No12410に返信(AE101さんの記事)
> Inherits System.Windows.Forms.TextBox
> に変更しても動作しませんでした。

これは当然 TextBox から継承しないといけませんからね。(^-^*)

コードを見る限りでは、TextBox1 が MyValidate イベントではなく、
Validating イベントのままなので、期待通りにならないでしょう。
TextBox1 は System.Windows.Forms.TextBox のままじゃないかとも予想されます。

カスタム コントロールとイベントの概念がある程度わかっていないと厳しいです。
早い返信大変ありがとございます。
自分でも試行錯誤やっているうちにカスタムコントールが分かっていないことが分かり、今VS.NETのHELPを読んでいます。
出直してきます。
懇切丁寧な解説お忙しいのにありがとうございます。
こんにちは、じゃんぬ です。

■No12412に返信(AE101さんの記事)
> 出直してきます。
> 懇切丁寧な解説お忙しいのにありがとうございます。

いえ、こちらこそすいません。(*_ _)

簡単に言えば、TextBox を継承し MyValidate イベントを追加した ExTextBox を作ります。
で、この ExTextBox を画面に貼り付けるのですが、
「Windows フォーム デザイナで生成されたコード」にある、
System.Windows.Forms.TextBox を ExTextBox に変えるということになります。
そして、現在 Validating イベントに記述されているコードを、
MyValidate イベントに移し変えるということです。

この作業の中でわからないことがあれば、また質問してください。

DOBON.NET | プログラミング道 | プログラミング掲示板