オルタナティブ・ブログ > mtaneda ブログ >

中小企業の開発者は会社で何をしているのか

自動カンマ挿入

»

お客さんから、テンキーから金額を入力するとき、自動的にカンマが挿入されるようにして欲しいと言われました。

C#で.NET Framework を使ったアプリケーションなので、
TextChangedのハンドラとして、textBox1.Text=String.Format("{0:#,0}",int.Parse(textBox1.Text)); こんなものを入れるだけで実現できますが、
キャレットの動きや、数値をBackspaceで消したときの動きが気持ち悪いものになるので、
簡単なクラスを作ってみました。

まだ手抜きなので、100万を超える値を入力するとキャレットの動きが変になりますが、
それはあとで直しましょう。

めちゃくちゃ簡単なネタですが、
意外とウェブ上によさそうなものがなかったので、取り敢えず載せてみます。
いまいちわかりづらいですが・・・

/*! @file AutoCommaTextBox.cs

* @brief 自動的にカンマを挿入するテキストボックス

* $Id: $

*

* Copyright (C) 2013 Nippon C.A.D Co.,Ltd.

* All Rights Reserved.

* This code was designed and coded by mtaneda

*/

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

///<summary>

///   自動的にカンマを挿入するテキストボックス

///</summary>

publicclassAutoCommaTextBox:TextBox{

 ///<summary>

 ///   コンストラクタ

 ///</summary>

    public AutoCommaTextBox():base(){

        this.TextChanged+=new System.EventHandler(this.this_TextChanged);

    }

 

 ///<summary>

 ///   このイベントハンドラにより、自動的にカンマが挿入される

 ///</summary>

 ///<param name="sender"></param>

 ///<param name="e"></param>

    private void this_TextChanged(object sender,EventArgs e){

        int lastCarretPosition=this.SelectionStart;

        int lastLength=this.Text.Length;

        bool hasComma=this.Text.Contains(',');

 

        this.Text=String.Format("{0:#,0}",int.Parse(this.Text));

 

        if(hasComma){

            if(this.Text.Contains(',')){

                this.SelectionStart=lastCarretPosition;

            }

            else{

                this.SelectionStart=lastCarretPosition-1;

            }

        }

        else{

            if(lastLength<this.Text.Length){

                this.SelectionStart=lastCarretPosition+1;

            }

            else if(lastLength>this.TextLength){

                this.SelectionStart=lastCarretPosition-1;

            }

        }

    }

}

 

Comment(0)