MS Access Tips/Sample and VBA and Blog customize etc...

テキストボックスで文字数制限を設定して残り入力可能文字数も表示

テキストボックスに入力できる文字数を設定して、それ以上は入力できないようしたい場合、連結テキストボックスなら連結したフィールドの方でフィールドサイズを設定すれば簡単ですが、非連結テキストボックスだとそのようなプロパティはありません。

また、入力中にリアルタイムで「あと○文字入力可能です。」というように表示できたらいいですよね。

残り入力可能文字数表示タイトル

難易度:

コード例

まずは、コードから。

テキストボックス名は「テキスト0」、残り文字数を表示するのは「ラベル2」とします。
テキストボックスの「変更時」のイベントプロシージャを下記のように記述します。

解説

イベントとしては「キー入力時」も考えられますが、IME経由で入力されたり、右クリックで貼り付けされた時には反応しません。「変更時」イベントならそれらでも反応しますので、それがいいでしょう。

次に、入力中の文字列をどのように取得するかですが、Valueプロパティではフォーカスを移動するなどして確定したものしか取得できないのでダメです。Textプロパティを使えば、入力途中の文字列を取得できます。

Textプロパティで取得した文字数が制限数を超えていたら、Left関数で制限数だけ切り取って、Textプロパティに代入します。

VBAからTextプロパティを変更すると「変更時」イベントが発生してしまうので、「変更時」イベント処理中に、さらに「変更時」イベントが発生するというややこしい状態(イベント再入)になるので、.OnChange = "" でイベントプロシージャとの関連付けを解除しておきます。
代入後に、.OnChange = "[イベント プロシージャ]" で関連付けも戻します。

また、Textプロパティに代入するとカーソルが先頭に移動してしまうので、カーソル位置(SelStart)を変数に記憶しておいて、代入後に戻します。


拍手する

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/437-498d33a6
該当の記事は見つかりませんでした。