簡體   English   中英

如何在 Winform 中格式化 LostFocus 事件的所有文本框值

[英]How to format all textbox values on LostFocus event in Winform

在失去焦點事件時,我需要在任何相關文本框值中的每個數值的千 position 中添加逗號。 我創建了以下 function:

public static void FormatNumerical(this Control control)
{
    if (!(control is TextBox) || !control.Text.IsNumeric()) return;

    control.Text = String.Format("{0:n}", control.Text);
}

有沒有辦法一次性將此方法應用於我的winform應用程序中所有文本框的所有丟失焦點事件?

那是你需要的嗎?

ProcessTextBoxes(this, true, (textbox) =>
{
  if ( !textbox.Focused && textbox.Text.IsNumeric() )
    textbox.Text = String.Format("{0:n}", textbox.Text);
});

private void ProcessTextBoxes(Control control, bool recurse, Action<TextBox> action)
{
  if ( !recurse )
    Controls.OfType<TextBox>().ToList().ForEach(c => action?.Invoke(c));
  else
    foreach ( Control item in control.Controls )
    {
      if ( item is TextBox )
        action.Invoke((TextBox)item);
      else
      if ( item.Controls.Count > 0 )
        ProcessTextBoxes(item, recurse);
    }
}

您可以調整this代碼並將其傳遞給表單或任何容器(如面板),並使用遞歸或不處理所有內部。

此外,您可以在每個離開事件上執行此操作,並將一個分配給所有需要的:

private void TextBox_Leave(object sender, EventArgs e)
{
  var textbox = sender as TextBox;
  if ( textbox == null ) return;
  if ( textbox.Text.IsNumeric() )
    textbox.Text = String.Format("{0:n}", textbox.Text);
}

private void InitializeTextBoxes(Control control, bool recurse)
{
  if ( !recurse )
    Controls.OfType<TextBox>().ToList().ForEach(c => c.Leave += TextBox_Leave);
  else
    foreach ( Control item in control.Controls )
    {
      if ( item is TextBox )
        item.Leave += TextBox_Leave;
      else
      if ( item.Controls.Count > 0 )
        InitializeTextBoxes(item, recurse);
    }
}

public FormTest()
{
  InitializeComponent();
  InitializeTextBoxes(EditPanel, true);
}

暫無
暫無

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

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