- PR -

DateTimePickerの日付に一桁入力したときの処理

1
投稿者投稿内容
masa
会議室デビュー日: 2003/09/02
投稿数: 8
お住まい・勤務地: 東京
投稿日時: 2004-10-28 16:31
こんにちは。
困っているのでご教授ください。

DateTimePickerの日付に、"2004/10/10"と入っている状態で、日に"9"と一桁だけ入力をして、Validatingイベントが起きると、Valueは9日を認識せず"2004/10/10"のままとなってしまいます。

Validatingイベントを使用せず、LostFocusイベントで処理をすれば2004/10/09"の日付を取得できるのですが、Validatingイベントで"2004/10/09"と認識できる方法はあるのでしょうか。

よろしくお願いします。

=========================================================================
※下のプログラム例では、日付に"2004/10/10"⇒"9"を入力したにもかかわらず、"未来"が表示されます。

Private Sub DateTimePicker1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles DateTimePicker1.Validating
With CType(sender, DateTimePicker)
If .Value < CDate("2004/10/10") Then
MessageBox.Show("過去")
Else
MessageBox.Show("未来")
End If
End With
End Sub
masa
会議室デビュー日: 2003/09/02
投稿数: 8
お住まい・勤務地: 東京
投稿日時: 2004-10-28 19:26
追記です。

その後調べていたのですが、エンターキー押下時に次のコントロールへ移動する処理を入れていますが、そのエンターキーを押したときのみ起こっています。
何かお分かりの方、よろしくお願いします。

======================================================
Protected Overrides Sub OnKeyDown(ByVal e As System.Windows.Forms.KeyEventArgs)
MyBase.OnKeyDown(e)
Select Case e.KeyCode
Case Keys.Return
' 次のコントロールへ
        SelectNextControl(ActiveControl, True, True, True, True)
'TextBox1.Focus()
End Select

MyBase.OnKeyDown(e)
End Sub
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-10-28 21:04
引用:

masaさんの書き込み(2004-10-28 16:31)より:

Validatingイベントを使用せず、LostFocusイベントで処理をすれば2004/10/09"の日付を取得できるのですが、Validatingイベントで"2004/10/09"と認識できる方法はあるのでしょうか。


 やりたいことは、「今日以降の日付を、入力禁止にする」とかじゃないですか?だったら、MaxDate, MinDateというプロパティがあるのですが、これは利用できませんか?
_________________
nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2004-10-28 21:44
引用:

Validatingイベントを使用せず、LostFocusイベントで処理をすれば2004/10/09"の日付を取得できるのですが、Validatingイベントで"2004/10/09"と認識できる方法はあるのでしょうか。



南部です。

09って入力すればいけるはずですが、まあ、現実的ではないですね。
2桁入れるか、現在入力しているフィールド(コントロールではない)
から移動することで値が確定する以上、フォーカスを移すと

1. Leave
2. Validating
3. Validated
4. ValueChanged (ここで、確定)
5. LostFocus

となると予測されますので、
つまり、
> Validatingイベントで"2004/10/09"と認識できる方法はあるのでしょうか。
これは無理だと思います。

#なんで、Validatingで?
nanbu
大ベテラン
会議室デビュー日: 2004/08/19
投稿数: 178
投稿日時: 2004-10-28 22:03
南部です。

DateTimePickerに、次のフィールドを選択するメソッドがなかったので、
無理だと即答してしまいましたが、
次のコントロールへフォーカスを移す前に、
次のフィールドを選択させればいいので、
コード:
private void dateTimePicker_KeyDown(object sender, KeyEventArgs e)
{
  if(e.KeyCode == Keys.Enter) 
  {
    SendKeys.SendWait("{right}");
    SelectNextControl(ActiveControl, true, true, true, true);
  }
}


というのは、どうでしょう?
masa
会議室デビュー日: 2003/09/02
投稿数: 8
お住まい・勤務地: 東京
投稿日時: 2004-10-28 23:04
Jittaさん、南部さん、ありがとうございました。

南部さんの方法で、解決することができました。
ただ、この1行でなぜ解決した解っていないので、調べてみようと思います。(^^;
SendKeys.SendWait("{right}")

また何かありましたら、よろしくお願いします。
1

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