種類 | 内容 |
---|---|
日付 |
[フォーカスイン] ⇒月日の前ゼロを除去("yyyy/M/d"形式) [フォーカスアウト] ⇒"yyyy/MM/dd"形式に編集 |
金額 |
[フォーカスイン] ⇒カンマを除去 [フォーカスアウト] ⇒3桁ごとにカンマを付けて編集(整数のみ) |
'***************************************************************************************************
' フォーム上の数値、日付の編集(テスト) frmNumberDateEdit1(Form)
'
' 作成者:井上治 URL:https://www.ne.jp/asahi/excel/inoue/ [Excelでお仕事!]
'***************************************************************************************************
' 変更日付 Rev 変更履歴内容-------------------------------------------------------------------->
' 20/02/24(1.0.0.0)新規作成
'***************************************************************************************************
Public Class frmNumberDateEdit1
'===============================================================================================
Private Const g_cnsTitle As String = "フォーム上の数値、日付の編集(テスト)"
' その他定数
Private Const g_cnsTypeTextBox As String = "010101" ' TextBoxのタイプ(0=日付, 1=金額)
Private Const g_cnsFormatDate As String = "yyyy/MM/dd" ' 日付フォーマット(表示)
Private Const g_cnsFormatDateE As String = "yyyy/M/d" ' 日付フォーマット(入力)
'-----------------------------------------------------------------------------------------------
' TextBoxテーブル
Private g_tblTextBox() As TextBox ' TextBoxテーブル
'***********************************************************************************************
' ■■■ フォームイベント ■■■
'***********************************************************************************************
'* 処理名 :Form_FormClosed
'* 機能 :フォーム閉鎖(FormClosed)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(デフォルト)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2020年02月24日
'* 作成者 :井上 治
'* 更新日 :2020年02月24日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub Form_FormClosed(ByVal sender As Object, _
ByVal e As FormClosedEventArgs) Handles Me.FormClosed
'-------------------------------------------------------------------------------------------
' 設定退避
With My.Settings
.FormLocation = Me.Location
' 設定を保存
.Save()
End With
'-------------------------------------------------------------------------------------------
' 独自イベントハンドラ解放
For Each objTextBox As TextBox In g_tblTextBox
With objTextBox
' Enterイベント
RemoveHandler .Enter, AddressOf TextBox_Enter
' Leaveイベント
RemoveHandler .Leave, AddressOf TextBox_Leave
End With
Next objTextBox
End Sub
'***********************************************************************************************
'* 処理名 :Form_Load
'* 機能 :フォーム初期化(Load)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(デフォルト)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2020年02月24日
'* 作成者 :井上 治
'* 更新日 :2020年02月24日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub Form_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'-------------------------------------------------------------------------------------------
' 設定値復旧
With My.Settings
If .UpgradeRequired Then
.Upgrade()
.UpgradeRequired = False
End If
Me.Location = .FormLocation
End With
'-------------------------------------------------------------------------------------------
' TextBoxテーブルを作成
g_tblTextBox = {TXT_DATE1, TXT_NUMBER1, TXT_DATE2, TXT_NUMBER2, TXT_DATE3, TXT_NUMBER3}
' 独自イベントハンドラ設定
For Each objTextBox As TextBox In g_tblTextBox
With objTextBox
' Enterイベント
AddHandler .Enter, AddressOf TextBox_Enter
' Leaveイベント
AddHandler .Leave, AddressOf TextBox_Leave
End With
Next objTextBox
End Sub
'***********************************************************************************************
'* 処理名 :Form_Shown
'* 機能 :フォーム初期表示(Shown)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(デフォルト)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2020年02月24日
'* 作成者 :井上 治
'* 更新日 :2020年02月24日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub Form_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
'-------------------------------------------------------------------------------------------
' フォームクリア
Call GP_ClearForm()
' 初回は全選択されないので一旦次項目を選択して戻す
TXT_NUMBER1.Focus()
TXT_DATE1.Focus()
End Sub
'***********************************************************************************************
' ■■■ コントロールイベント ■■■
'***********************************************************************************************
'* 処理名 :TextBox_Enter
'* 機能 :テキストボックスイベント(Enter)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(デフォルト)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2020年02月24日
'* 作成者 :井上 治
'* 更新日 :2020年02月24日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub TextBox_Enter(ByVal sender As Object, ByVal e As System.EventArgs)
'-------------------------------------------------------------------------------------------
' テキストボックスの再編集(入力用)
Call GP_ReFormatTextBox(CType(sender, TextBox), False)
End Sub
'***********************************************************************************************
'* 処理名 :TextBox_Leave
'* 機能 :テキストボックスイベント(Leave)
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(デフォルト)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2020年02月24日
'* 作成者 :井上 治
'* 更新日 :2020年02月24日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub TextBox_Leave(ByVal sender As Object, ByVal e As System.EventArgs)
'-------------------------------------------------------------------------------------------
' テキストボックスの再編集(表示用)
Call GP_ReFormatTextBox(CType(sender, TextBox), True)
End Sub
'***********************************************************************************************
' ■■■ サブ処理 ■■■
'***********************************************************************************************
'* 処理名 :GP_ClearForm
'* 機能 :フォームクリア
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :(なし)
'-----------------------------------------------------------------------------------------------
'* 作成日 :2020年02月24日
'* 作成者 :井上 治
'* 更新日 :2020年02月24日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub GP_ClearForm()
'-------------------------------------------------------------------------------------------
Dim strDate As String = Today.ToString(g_cnsFormatDate) ' 本日(編集)
' 各テキストボックスを巡回
For Each objTextBox As TextBox In g_tblTextBox
With objTextBox
Dim intIx As Integer = Integer.Parse(.Tag) ' テーブルINDEX
' タイプを判定
If Integer.Parse(g_cnsTypeTextBox(intIx)) = 1 Then
' 金額
.Text = "0"
Else
' 日付
.Text = strDate
End If
End With
Next objTextBox
End Sub
'***********************************************************************************************
'* 処理名 :GP_ReFormatTextBox
'* 機能 :テキストボックスの再編集
'-----------------------------------------------------------------------------------------------
'* 返り値 :(なし)
'* 引数 :Arg1 = テキストボックス(Object)
'* Arg2 = 編集方法(Boolean) ※True=表示用、False=入力用
'-----------------------------------------------------------------------------------------------
'* 作成日 :2020年02月24日
'* 作成者 :井上 治
'* 更新日 :2020年02月24日
'* 更新者 :井上 治
'* 機能説明:
'* 注意事項:
'***********************************************************************************************
Private Sub GP_ReFormatTextBox(ByVal objTextBox As TextBox, ByVal blnFormat As Boolean)
'-------------------------------------------------------------------------------------------
Dim intIx As Integer = Integer.Parse(objTextBox.Tag) ' テーブルINDEX
Dim intType As Integer = Integer.Parse(g_cnsTypeTextBox(intIx)) ' タイプ
Dim blnReEdit As Boolean = False ' 再編集判定
Dim strText As String = objTextBox.Text.Trim ' 入力値
' タイプを判定して再編集
If intType = 1 Then
' 金額
Dim decGaku As Decimal ' 金額
' 金額に変換できるか
If Decimal.TryParse(strText, decGaku) Then
blnReEdit = True
' 表示用か
If blnFormat Then
strText = decGaku.ToString("#,##0")
Else
strText = decGaku.ToString("0")
End If
End If
Else
' 日付
Dim dteDate As Date ' 日付
' 日付に変換できるか
If Date.TryParse(strText, dteDate) Then
blnReEdit = True
' 表示用か
If blnFormat Then
strText = dteDate.ToString(g_cnsFormatDate)
Else
strText = dteDate.ToString(g_cnsFormatDateE)
End If
End If
End If
' 再編集結果を更新
If blnReEdit Then objTextBox.Text = strText
End Sub
'----------------------------------------<< End of Source >>------------------------------------
End Class