2015-08-19 13 views
1

好吧,所以我想爲我的窗體上的所有文本框應用帳戶編號格式。如何將文本框格式化方法應用於所有文本框控件

現在,我在這裏做了一些研究,發現這個帖子將幫助我設置format

然後我發現了另一篇文章,在窗體上將所有文本框controls的格式應用到單獨向所有控件添加format代碼。

嗯,問題是,format上的代碼使用控件名稱,它將綁定到單個文本框控件。我嘗試了控制名稱(TextoBox),而且它也失敗了。

還有一個問題需要考慮,即使我設法克服上述問題,format中的代碼是一個以控件名稱命名的事件,所以我認爲它不會起作用,如果我將它應用於一個類或方法,並呼籲它。

雖然我已經有解決方案,我想要的,我想知道是否有一個更快的方式來應用它,這將不會添加很多行到我的代碼。試着學習如何讓事情更容易閱讀,少花點功夫。有任何建議嗎?

感謝您的閱讀。

+0

如果會計是真正重要的,我會建議使用十進制類型,而不是雙。 Double會更快,但Decimal更精確。找出哪種權衡是合理的,並據此作出決定。 – Cory

回答

1

這聽起來像你有所有的作品,只需要幫助把它放在一起。對於ControlName,您可以將發件人對象轉換爲控件並訪問其Name屬性。

void SetProperty(Control ctr) 
{ 
    foreach (Control control in ctr.Controls) 
    { 
     if (control is TextBox) 
     { 
      control.Leave += control_Leave; 
     } 
     else 
     { 
      if (control.HasChildren) 
      { 
       SetProperty(control); 
      } 
     } 
    } 
} 

void control_Leave(object sender, EventArgs e) 
{ 
    var textBox = sender as TextBox; 
    Double value; 
    if (Double.TryParse(textBox.Text, out value)) 
     textBox.Text = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C2}", value); 
    else 
     textBox.Text = String.Empty; 
} 

用法:

SetProperty(this); 

而且,從我在OP評論:如果會計是真正重要的,我會建議使用十進制類型,而不是雙。 Double會更快,但Decimal更精確。找出哪種權衡是合理的,並據此作出決定。每評論


編輯:

myTextBox.Leave -= control_Leave 

如果你知道控件的名字,上面會工作。在使用SetProperty(this)之後,您將需要執行此操作。如果你想在SetProperty()方法中處理這個,請檢查control.Name ==「myTextBox」。

+0

它工作完美!非常感謝幫助我! –

+0

現在,快速的問題,如果我想要一個沒有格式化的單個文本框控件集?我試過了: Mytextbox.Text = String.Format(「{0}」,txbTrackingID.Text); 在MSDN的CurrentCulture上發現了上面的一些變化以及其他一些信息,但它沒有解決。 –

+0

您需要一些方法來明確識別此文本框並以不同的方式處理它。如果你知道這個控制器,你可以解開偶數處理器。看我的編輯。 – Cory

0

您可以訂閱多個控件的事件(即使用相同的參數)相同的事件處理程序:

public YourFormConstructor() 
{ 
    foreach(var textbox in form.Controls.OfType<TextBox>()) 
     textbox.Leave += FormatCurrencyText; 
} 


private void FormatCurrencyText(object sender, EventArgs e) 
{ 
    var textbox = sender as TextBox; 
    Double value; 
    if (Double.TryParse(textbox.Text, out value)) 
     textbox.Text = String.Format(System.Globalization.CultureInfo.CurrentCulture, "{0:C2}", value); 
    else 
     textbox.Text = String.Empty; 
} 
相關問題