我是Visual Studio(2010)的初学者,我想接受一些从表单到后端的数据,如Integer或任何其他类的对象,而不是让人头疼手动进行转换(我将不得不学习如果不可能的话。)
Textbox1.Text总是返回String,而我希望它作为Textbox1.ClassName获得自动转换。
有可能吗?
答案 0 :(得分: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);
上调用。
答案 1 :(得分: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);
}
}