0

金額の入力を促すTextBoxを作成しています。したがって、ユーザーがそのTextBoxに1000と入力すると、TextBoxでは自動的に1,000になります。これは可能ですか?

4

3 に答える 3

2

私は長さベースのソリューションが好きではありません(より多くの数のためにより多くのコードを実装する必要があります)。

グーグルで見つかった1つの解決策はそれです:

XAMLファイルの場合:

<code>
<textbox x:name="PurchasePriceTextBox" text="$0.00" keydown="CurrencyTextBox_KeyDown" lostfocus="CurrencyTextBox_LostFocus" />
</code>

CSファイルの場合:

private void CurrencyTextBox_KeyDown(object sender, KeyRoutedEventArgs e)
{
char key = Convert.ToChar(e.Key);
//if the key is not 0-9 prevent the event from being handled further
if (!(key >= '0' && key <= '9'))
   e.Handled = true;  
}
private void CurrencyTextBox_LostFocus(object sender, RoutedEventArgs e)
{
   var textBox = (TextBox)sender;
   decimal value = 0;
   //if the textbox is not already formatted as currency, format it
   if(Decimal.TryParse(textBox.Text.Trim(), NumberStyles.Number | NumberStyles.AllowCurrencySymbol, CultureInfo.CurrentUICulture, out value))
   {
      textBox.Text = string.Format("{0:C}", value);
   }
}

ソース

于 2012-10-16T07:20:20.723 に答える
0

フォーカスリーブイベントでは、長さに応じてループします。

if (textbox.Text.Length <4)
{
    return;
}
int i = 2;
if textbox.Text.Length%2 ==0)
{
    i = 1;
}
l = textbox.Text.Length;
while(l > 3)
{
    textbox.Text = textbox.Text.Insert(i, ",");
    i+=2;
    l-=2;
}
return;
于 2012-10-16T07:28:31.287 に答える
0

以下に示すように、テキストボックスのtextbox_TextChangedイベントを利用します。

private void textbox_TextChanged(object sender, TextChangedEventArgs e)
    {
        if (textbox.Text.Length ==4)
        {
            textbox.Text = textbox.Text.Insert(1, ",");
            return;
        }        
    }
于 2012-10-16T07:07:38.573 に答える