- - PR -
DateValueで設定したTextBoxのModified・・・。
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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-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