この文字「。」の後のテキストボックス内。このような2文字だけを入力してほしい
100.00
。どうやってやるの ?
5 に答える
コンテンツを制限および変更するOnTextChangedイベントを実装する
private void textBox1_TextChanged(object sender, EventArgs e)
{
int i = textBox1.Text.IndexOf(".");
if ((i != -1) && (i == textBox1.Text.Length - 4))
{
textBox1.Text = textBox1.Text.Substring(0, textBox1.Text.Length - 1);
textBox1.SelectionStart = textBox1.Text.Length;
}
}
目標が数字のみの場合は、次を使用します。
winforms http://msdn.microsoft.com/en-us/library/system.windows.forms.numericupdown.aspx
asp.net http://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/NumericUpDown/NumericUpDown.aspx
まず、機能的に次のことを行うかどうかを決定する必要があります。
- マスクを使用して防止する、または
- つまり、正規表現を使用して検証します
実装は、選択したテクノロジーによって異なります。
防止する場合は、MaskedTextBoxコントロールを探すことができます。これは WinForms で提供され、WPF の Web で見つけることができます。
検証する場合は、Windows フォームまたはWPFのベスト プラクティスを使用してください。
そのイベントを使用しTextChanged
て入力を検証できます。
private void textBox1_TextChanged(object sender, EventArgs e)
{
TextBox txt = (TextBox)sender;
double d;
if (!double.TryParse(txt.Text, out d))
{
MessageBox.Show("Please enter a valid number");
return;
}
string num = d.ToString();
string decSeparator = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
int numDecPlaces = 0;
int decSepIndex = num.LastIndexOf(decSeparator);
if (decSepIndex != -1)
numDecPlaces = num.Substring(decSepIndex).Length;
if (numDecPlaces > 2)
{
MessageBox.Show("Please enter two decimal places at a maximum");
return;
}
}
ポイントの後のtextbox.textの長さを確認して、それを行うことができます。「.」のインデックスを見つける textbox.text.length がそのインデックス + 3 よりも大きい場合は、最後の文字を削除します。
int indexofDot=textbox.Text.indexOf('.');
if(textbox.text.Length>indexofDot+3) {... }
最後の文字を削除するには、文字列を別の一時文字列にコピーし、最後の文字を削除してから textbox.Text に戻します