【问题标题】:c# Format all TextBox when lostfocusc#失去焦点时格式化所有TextBox
【发布时间】:2018-04-18 11:00:06
【问题描述】:

我创建了将网格中的所有文本框格式化为货币的公共 void

我的代码

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)
{

}

【问题讨论】:

  • StringFormat='{}{0:c}' 在您的文本框中?这样你就不需要任何后端代码来尝试格式化它。
  • 你能描述一下如何以及在哪里放置它吗?
  • @IdanSim 我需要在 Winform 中做类似的事情。你找到解决办法了吗?

标签: c# wpf xaml


【解决方案1】:

如果将Text 属性绑定到源属性,则可以将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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    相关资源
    最近更新 更多