見出し画像

わからないことは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/

いいなと思ったら応援しよう!