掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DTPickerの入力位置を取得するには? (ID:102568)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> 現在入力している箇所を取得できるような方法が知りたいです。 CustomFormat でコールバック フィールドを指定しては如何でしょう。 これならば、各種イベントの CallbackField 引数で判定できます。 とはいえ、年や月や日をすべてコールバック フィールドにしてしまうと、 CallbackKeyDown イベントの実装が大変な手間になってしまうので、 ここは「年+月+日+コールバック」の4フィールド構成にしておき、 『コールバック フィールドにきたときにフォーカス遷移』という 実装にするというのは如何でしょう。 '--------------------- Option Explicit Private Sub Form_Load() '末尾にダミーフィールド X を指定しておく。 DTPicker1.CustomFormat = "yyyy'/'MM'/'ddX" DTPicker1.Format = dtpCustom 'KeyDown や KeyUp イベント等とは異なり、CallbackKeyDown イベントは 'コールバック フィールド以外では発生しないため、日付の末尾に 'ダミーフィールドを設けておけば、ここで発生したキー入力イベントは '年月日すべての入力が完了した後という事になる。 End Sub Private Sub DTPicker1_Format(ByVal CallbackField As String, FormattedString As String) '「まず使われない」キーとして、F16 を制御キーに使う。 '(DTPicker や他のコントロールの動作に影響を与えないキーを選択する) SendKeys "{F16}", False 'ここでの F16 送出は必須ではないが、これを書いておかないと、 'フィールド移動に(Enter ではなく)右矢印キーを押した場合に都合が悪い。 End Sub 'KeyPress では Enter キーを拾えないので、KeyUp で代用。 Private Sub DTPicker1_KeyUp(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyReturn Then '次フィールドに移るために[→][F16]を送出する。 SendKeys "{Right}{F16}", True End If End Sub Private Sub DTPicker1_CallbackKeyDown(ByVal KeyCode As Integer, ByVal Shift As Integer, _ ByVal CallbackField As String, CallbackDate As Date) 'ダミーフィールドで制御キー(今回はF16)が押されたら 'SetFocus メソッド(もしくは Tab キー送出)等を用いて、 '次のコントロールにフォーカスを切り替える。 If KeyCode = vbKeyF16 Then '←今回の場合、KeyCode 判定無しでもOK。 'コントロールのフォーカスを切り替える前に、次回フォーカス時に向け 'アクティブなフィールドを、(X ではなく)yyyy もしくは dd 部に '戻しておく必要がある。 'SendKeys "{Right 1}", True 'yyyy 部をアクティブにする場合 SendKeys "{Left 1}", True 'dd 部をアクティブにする場合 '次のコントロールに遷移 Text1.SetFocus End If End Sub '--------------------- ただし上記の実装だと、yyyy 部で[←]を押した場合も、 次コントロールへの遷移として扱われますのでご注意を。 もし、yyyy 部での [←] を無視する(または dd 部に送る)ように 変更したいのであれば、X の次または yyyy の前に、もう一つの ダミーコールバックフィールドを用意しておき、各イベントで CallbackField を調べて、振る舞いを変える必要があるかも。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.