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