- PR -

DateValueで設定したTextBoxのModified・・・。

1
投稿者投稿内容
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2004-10-29 13:52
お世話になります。さかもとです。
WinXp
VS2003(VB)
SQLserver
で開発中です。
次の処理を行おうとしています。
=====================================================================
1:textAに入力された文字列が 例)7/7 等のとき
textA.Text = DateValue(textA.Text)
とし 例)2004/07/07 と修正している

2:textAが編集された場合は
If textA.Modified Then
Return True
End If
とし編集があった事を判断する
====================================================================

問題は,
1:DateValue(textA.Text) とし日付をセットした時に textA.Modified がFalseで戻ってしまう
  例)"空白のtextA" ⇒ "7/7" ⇒DateValue(textA.Text)で"2004/07/07"
 
2:textAを 例)"2004/07/07" ⇒ "2004/07/07" と日付の7を編集後同じ7で入力するとtextA.Modifiedがtrueで戻る(これは当然ですが)
 
ということです。
 DataValueでセットするとModified=falseとなる以上,編集前のtextAをどこかに一時退避しておき,その値と編集後のtextAを比べればよいのでしょうが,もう少しスマートなやり方があるかと思いまして・・・。

textA.CanUndo()で真偽を拾ってきたら出来るかと思ったのですが,これだとある日付を同じ日付として編集した場合(上記2の場合)もTrueで拾ってしまうので判断が出来ません。

編集前と編集後のテキストボックスの値をスマート(微妙な表現ですが)比べる方法は何かあるでしょうか?

ご存知の方がいらっしゃいましたらご教授ください。
宜しくお願い致します。
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2004-10-29 14:51
さかもと自己レスです。
うまいやり方とは思いませんが,一応解決できたのでレスしておきます。

1:ModifiedYmdクラスの作成
プロパティ1=Original():編集前の値を保持
プロパティ2=Changed():編集後の値を保持
プロパティ3=Modified():二つを比べてbooleanで返す

2:textA_Validating イベントで(細かい部分は省いてます)

Dim Ymd As New ModifiedYmd
Ymd.Original = textA.Text '編集前の値をセット

'/Funtion ValidYmdを使用して形式をチェックする
If Not ValidYmd(textA.Text, errTextAYmd) Then
'/エラーがあるときはMSG出力
e.Cancel = True
textA.Select(0, textA.Text.Length)
Me.ErrPro.SetError(textA, errTextAYmd)
Else
'/エラー無し、若しくはエラー訂正後正しい形式であればMSGを消す
textA.Text = DateValue(textA.Text)
Ymd.Changed = textA.Text
If Ymd.Modified Then
textA.Modified = True
Else
textA.Modified = False
End If

Me.ErrPro.SetError(textA, Nothing)
e.Cancel = False
End If

3:textA.Modified を判断する


以上で一応実現できました。
他の方法があればいいのですが,私のレベルではこれが限界です・・・(笑)
1

スキルアップ/キャリアアップ(JOB@IT)