2015-06-08 84 views
1

我是Visual Studio(2010)的初學者,我想接受一些數據從表單到後端,比如整型或任何其他類的對象,而不是手動進行轉換(如果不可能,我將不得不學習)。指定Windows窗體文本字段上的數據類型

Textbox1.Text總是返回String,而我希望它作爲Textbox1.ClassName來獲得自動轉換。

是否有可能?

+0

一件事情你能做的就是限制用戶的輸入,那麼具體。 http://stackoverflow.com/questions/3413708/how-to-allow-user-to-enter-only-numbers-in-a-textbox-in-vb-net但是它仍然是一個字符串,所以你需要自己做轉換。 – Jeremy

+0

也是,這裏有一篇很棒的關於輸入的綜合文章。 http://www.rhyous.com/2010/06/18/how-to-limit-or-prevent-characters-in-a-textbox-in-csharp/ – Jeremy

+0

@Jeremy謝謝你Jeermy,但它對我沒有幫助案件。 – Rorschach

回答

2

您將需要使用轉換,你別無選擇。你可以做的是擴展文本框,並在其中寫入你的轉換器。最有可能的傳遞缺省值的情況下,轉換失敗

喜歡的東西:

public static class Extensions 
{ 
    public static int TextAsInt(this TextBox txt, int defaultValue) 
    { 
     var result = 0; 

     if (!Int32.TryParse(txt.Text, out result)) 
     { 
      result = defaultValue; 
     } 

     return result; 
    } 
} 

,然後你可以使用它像這樣:

int result = Textbox1.TextAsInt(50); 

如果轉換失敗,返回的將是值50

現在說,使這樣的擴展這種可重用的最聰明的方法是擴展字符串對象而不是文本框。所以它會被調用Textbox1.Text.TextAsInt(50);

+0

我會使用'公共靜態詮釋TextAsInt(此TextBoxBase控制,詮釋默認= 0)'和驗證的目的可能有方法返回布爾。 – Sinatr

+0

爲此,我寧願使用覆蓋而不是可選。 – Franck

+0

@Franck它很容易從字符串轉換爲整數,但很難將其轉換爲任何對象。雖然,謝謝你的建議。 – Rorschach

1

Winforms中常見的做法是增強控制通過使自己的,這裏是我用過(剪輯版):

[System.ComponentModel.DesignerCategory("Code")] 
public class MyTextBox : TextBox 
{ 
    [Browsable(false)] 
    public int AsInt 
    { 
     get 
     { 
      int result; 
      int.TryParse(Text, out result); 
      return result; 
     } 
    } 
    [Browsable(false)] 
    public bool IsIntOk 
    { 
     get 
     { 
      int result; 
      return int.TryParse(Text, out result); 
     } 
    } 

    protected override void OnTextChanged(EventArgs e) 
    { 
     ForeColor = IsIntOk ? SystemColors.WindowText : Color.Red; 
     base.OnTextChanged(e); 
    } 
}