ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文
VB.NET 2005 : カスタムコントロールで Validaing 制御
日時: 2007/10/07 21:11
名前: lightbox



1) 追加 -> 新しい項目 -> ユーザーコントロールを選択
2) 全てのファイルを表示
3) ユーザーコントロールの Designer.vb の継承を TextBox に変更
4) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font をコメントにする

<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class UserControl
    Inherits System.Windows.Forms.TextBox

    'UserControl はコンポーネント一覧をクリーンアップするために dispose をオーバーライドします。
    <System.Diagnostics.DebuggerNonUserCode()> _
    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing AndAlso components IsNot Nothing Then
            components.Dispose()
        End If
        MyBase.Dispose(disposing)
    End Sub

    'Windows フォーム デザイナで必要です。
    Private components As System.ComponentModel.IContainer

    'メモ: 以下のプロシージャは Windows フォーム デザイナで必要です。
    'Windows フォーム デザイナを使用して変更できます。  
    'コード エディタを使って変更しないでください。
    <System.Diagnostics.DebuggerStepThrough()> _
    Private Sub InitializeComponent()
        components = New System.ComponentModel.Container()
        ' Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
    End Sub

End Class
5) ビルド
メンテナンス

ユーザーコントロールのコード追加 ( No.1 )
日時: 2007/10/07 21:01
名前: lightbox


日時: 2007/10/07 21:01
名前: lightbox
  内部 Validating・Validated イベントのオーバーライド

Public Class UserControl

	' ******************************************************
	' Valdating コントロールフラグ
	' ******************************************************
	Public Shared validateNone As Boolean = False

	Protected Overrides Sub OnValidating(ByVal e As System.ComponentModel.CancelEventArgs)

		' ******************************************************
		' validateNone が True ならば、Valdating は発生しない
		' ******************************************************
		If Not validateNone Then
			MyBase.OnValidating(e)
		End If

	End Sub

	Protected Overrides Sub OnValidated(ByVal e As System.EventArgs)

		' ******************************************************
		' validateNone が True ならば、Validated は発生しない
		' ******************************************************
		If Not validateNone Then
			MyBase.OnValidated(e)
		End If

	End Sub

End Class
外部から、UserControl.validateNone を True にする事によって、 このクラスを使用したユーザーコントロールは皆 Validate 処理が発生しない
このアーティクルの参照用URLをクリップボードにコピー メンテナンス
実際の制御 ( No.2 )
日時: 2007/10/07 21:07
名前: lightbox
1) キャンセルボタンの CausesVaidation を False にする。
2) キャンセル処理の先頭で、UserControl.validateNone を True にする
3) フォーカス移動先の GotFocus イベントで、UserControl.validateNone を False にする
' ******************************************************
' キャンセル
' ******************************************************
Private Sub キャンセル_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles キャンセル.Click

	UserControl.validateNone = True

	Me.ヘッド部.Enabled = True
	Me.ボディ部.Enabled = False

	Dim obj As Object

	For Each obj In Me.ボディ部.Controls
		If obj.GetType().ToString() = "System.Windows.Forms.TextBox" Then
			CType(obj, System.Windows.Forms.TextBox).Clear()
			CType(obj, System.Windows.Forms.TextBox).Enabled = True
		End If
	Next
	' -------------------------------------------------
	' DateTimePicker の初期化
	' -------------------------------------------------
	Me.生年月日.Enabled = True
	Me.生年月日.Value = CDate(Today().Date)
	Me.生年月日.Checked = False

	Me.社員コード.Focus()
	Me.社員コード.SelectAll()


End Sub
' ******************************************************
' + ステータスメッセージ
' ******************************************************
Private Sub 社員コード_GotFocus(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles 社員コード.GotFocus

	UserControl.validateNone = False
	Me.通常ラベル.Text = "社員コードを入力して下さい ( F6 : 参照 ) "

End Sub
このアーティクルの参照用URLをクリップボードにコピー メンテナンス