簡體   English   中英

C#失去焦點時格式化所有文本框

[英]c# Format all TextBox when lostfocus

我創建了公共空隙,將網格中的所有文本框格式化為貨幣

我的密碼

public void FormatinTextBox()
    {
        foreach (Control ctrl in MainGrid.Children)
        {
            if (ctrl.GetType() == typeof(TextBox))
            {
                double amount = 0.0d;
                if (Double.TryParse(((TextBox)ctrl).Text, NumberStyles.Currency, null, out amount))
                    ((TextBox)ctrl).Text = amount.ToString("C");
                else
                    ((TextBox)ctrl).Text = String.Empty;
            }
        }
    }

如果我將此代碼放到MainGrid_Loaded的事件處理程序中,它就可以完美地工作。

但是我想每次離開文本框(lostFocus)都運行此代碼。

我更喜歡在每個文本框上用xaml觸發此代碼,我不知道是否可以這樣做。 這是我的文本框之一在xaml中的代碼

<TextBox x:Name="Nose" HorizontalAlignment="Left" Height="24" Margin="710,209,0,0" TextWrapping="Wrap"                  
                     VerticalAlignment="Top" Width="110" BorderThickness="0,0,0,1" Text="100" LostFocus="Nose_LostFocus"/>

如果不可能的話,我該如何在后台代碼上運行此代碼

private void Nose_LostFocus(object sender, RoutedEventArgs e)
{

}

如果將Text屬性綁定到source屬性,則可以將StringFormat應用於綁定:

public partial class MainWindow : Window
{
    public MainWindow ()
    {
        InitializeComponent();
        Nose.DataContext = this;
    }

    public decimal? Text { get; set; }
}

XAML:

<TextBox x:Name="Nose" Text="{Binding Text, StringFormat=C}"/>

但是,如果您不需要某些自定義邏輯,則可以使用事件處理程序。 您將以與以前幾乎相同的方式實現它:

private void Nose_LostFocus(object sender, RoutedEventArgs e)
{
    TextBox textBox = (TextBox)sender;
    double amount;
    textBox.Text = (double.TryParse(textBox.Text, out amount)) ? amount.ToString("C") : string.Empty;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM