わからないことはcopilotに聞いてVB.NETでディスクトップアプリを作ってみよう NO.07 テキストBOX(数値)
アオノおじさんのひとりごと
(本文とは関係ありません、ひとりごとです)
皆さんキーボードは何を使っていますか?パソコンに付いていたものをそのまま、使っているかたが多いのかな。文章を入力するのを仕事にしているとキータッチは気になることろかと思います。プログラムするにも、大変多くの文字を打ち込みする場合があるのですが、プログラム変更とか、似たような仕様の場合、コピー&ペーストで作業が終わってしまう場合が多いときもあるかな。
数十年前から取引している得意先などは、仕様変更(税金などで)以外はそれほど、新規でプログラムを作成することは無いですので。
おじさんの使用しているキーボードは20年前から使用しているもので日本製 Realforceキーボードになるのですが、これがまた丈夫で壊れることもキー入力できないことも ありません。さすが日本品質です。
おじさんのは古いもので静音タイプではなく かちやかちやとうるさいタイプなのですが、これが、気にいってます。
かなり高価ですが、いいものです。アマゾンのリンクを貼っておきます。
テキストBOX(数値)
(ここから本文)
サンプルは以下からダウンロードできます。
(5~11回まですべてのサンプル)
04,05で作成したフォームにテキストBOXを追加します。
ツールボックス(開いていない場合 表示からツールボックスを選択)から
TextBoxをフォームへドラック Label もフォームへドラックします。
適当に位置と幅を調整します。(マウスで変更します)
個数として 数値のみを入力するようにします。
数値入力は、結構面倒です。copilotに聞いても あまりいい回答はえられません。今回、プログラムソースを詳しく説明します。
できれば、サンプル07をダウンロードして 実行しながら確認するのが
いいかと思います。
以下のように
Name Kosu
Font MS ゴシック, 12pt に設定します。
数値ですので、右合わせにする必要があります。copilotに聞いてみますと
プロパティの textAlign をRightに設定します。
個数のテキストをクリックし Ctrl+c でコピーし
Ctrl+v でペーストして 代引額を追加します。
Name Daibiki
Font MS ゴシック, 12pt に設定します。
個数、代引額とも Textを 0 にしてください。
これは 以下のように 初期の表示が 0 になるように設定します。
数値の難しいのは、入力は右から入力して表示する必要があります。
2 と入力し 次に 3と入力した場合
2
23
235 のように 左に数字が移動しないといけません。
また、3桁ごとにカンマ表示する方法として
簡単な方法として 入力時は 数値のみ入力して
カーソルが離れると カンマ表示するなどに方法があります。
マイナス入力、少数以下の入力の場合
マイナスは1つは入力できるが、2つはNG、また、数値の間もNG
少数以下の場合も 少数点 2つはNG 少数以下の桁数も指定できるようにするなど、結構面倒なプログラムになります。
07では、少数とマイナス入力の説明はいたしませんが ソースプログラム(有料)では その部分も公開する予定です。
個数の 数値だけ入力可能になるソースです
KeyPress (キーを押したときのイベント)で処理します。
Kosu_KeyPress を選択するには 以下にように
Kosu 選択
KeyPress 選択すれば、コードが自動作成されます。
e.KeyChar は キー入力した1文字となります。
select case e.KeyChar はこの e.KeyCharが何かで分岐処理ができます。
Case "0"c To "9"c 入力キー0~9の場合
Case Chr(Keys.Back) 入力キーが バックスペースの場合
Case Chr(Keys.Enter) 入力キーがEnterの場合
e.Handled = True これは 通常の処理をしないという意味
SendKeys.Send("{TAB}") TABキーを押す(Enter TABに変換)
Case Else それ以外のキー(文字など)
e.Handled = True これは 通常の処理をしない(入力しない)
となります。
Private Sub Kosu_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Kosu.KeyPress
Select Case e.KeyChar
Case "0"c To "9"c
Case Chr(Keys.Back)
Case Chr(Keys.Enter)
e.Handled = True
SendKeys.Send("{TAB}")
Case Else
e.Handled = True
End Select
End Sub
TextChanged を追加します。
これはテキストが変わるときにイベントが発生します。
ここで
Kosu.Select(Kosu.Text.Length, 0) 変更後 カーソルを右端に移動します。
Private Sub Kosu_TextChanged(sender As Object, e As EventArgs) Handles Kosu.TextChanged
Kosu.Text = CutStringByBytes(Kosu.Text, 3)
Kosu.Select(Kosu.Text.Length, 0) 'カーソルを最後に移動
End Sub
Validating を追加します。
Validatingはテキストボックスから離れる前のイベントです。
ここで、If IsNumeric(Kosu.Text) Then
IsNumeric の関数は、テキストボックスが数値かどうかを確認しており
数値なら フォーマットして表示
数値以外なら、0を表示させています。
数値しか入力しないようにしているのに これが必要かは、コピー&ペーストで数値以外のものがペーストされる場合があるためです。
Private Sub Kosu_Validating(sender As Object, e As CancelEventArgs) Handles Kosu.Validating
If Kosu.Text = "" Then Kosu.Text = "0"
If IsNumeric(Kosu.Text) Then
Kosu.Text = String.Format("{0:#,0}", Double.Parse(Kosu.Text))
Else
Kosu.Text = String.Format("{0:#,0}", 0)
End If
End Sub
代引額はもう少し複雑です。
, カンマ表示しているために テキストボックス フォーカスがあたると
,カンマ表示無しにし テキストボックスを離れると ,カンマ表示有りします。
桁数の文字数にすると 123,456 と 123456では ,カンマの1文字が違うため、文字数で判断するのでは無く 数値で判断する必要があります。
07サンプルプログラムをダウンロードして 違いを確認してみてください。
07 テキストBOX(数値)はこれで終了です。
← 前の記事に戻る 次の記事に行く →
また、私のホームページには、住所データも登録できるソフトも公開しています。こちらをクリック
以下は、今回の作成予定の実行ファイル OkuriJyo100.zip(無料)です。
01で入手していないかたは、こちらからダウンロードできます。
全ソースプログラムと解説書PDFは こちらから DLできます。
以下 仕事のホームページです。業務用パソコンソフトを開発販売しています、ご訪問いただけると幸いです。https://aonosys.jp/