在Windows窗体上指定数据类型

时间:2015-06-08 11:25:19

标签: c# .net winforms

我是Visual Studio(2010)的初学者,我想接受一些从表单到后端的数据,如Integer或任何其他类的对象,而不是让人头疼手动进行转换(我将不得不学习如果不可能的话。)

Textbox1.Text总是返回String,而我希望它作为Textbox1.ClassName获得自动转换。

有可能吗?

2 个答案:

答案 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);
    }
}