在同一个项目中使用跨表单的类

时间:2013-12-24 19:20:37

标签: c# winforms class

假设我有一个包含多种不同表单的项目:Form1Form2Form3我还有一个名为CustomTools的类,其中包含经常使用的验证程序和功能

class CustomTools
{
    bool isNumeric(object input)
    {
        double result;
        if (input == null)
            return false;
        else
        {
            if (double.TryParse(input.ToString(), out result))
                return true;
            else
                return false;
        }
    }
}

现在,当我尝试在我的某个表单中使用isNumeric时,它不会出现在IntelliSense弹出窗口中。在我的所有表格中提供此功能的最佳方法是什么?非常感谢你的帮助!

4 个答案:

答案 0 :(得分:4)

您必须在方法之前添加public

例如:

public bool isNumberic(object input)
{
   ...
}

您可能希望将方法设为静态:

public static bool isNumberic(object input)
{
   ...
}

这样你就可以通过以下方式打电话给他们:

CustomTools.isNumberic(someVariable);

答案 1 :(得分:0)

您可以使用静态/共享方法创建服务/帮助器类型类。这可以方便地将您的方法分组到一个地方,而不需要实例。但是,这种方法仅适用于无状态方法。您还可以考虑表单继承的基类。这个类可以容纳你的共享方法。有很多,可以接受的方法可以给这只猫上皮。

答案 2 :(得分:0)

类是引用类型,因此您需要的是所有三种形式的CustomTools类型的变量。我建议使用属性来设置像这样的变量

public class Form1 : Form
{
    public CustomTools Tools { get; set; }
}
public class Form2 : Form
{
    public CustomTools Tools { get; set; }
}
public class Form2 : Form
{
    public CustomTools Tools { get; set; }
}

每当您创建表单时,请为其指定Tools属性

var tools = new CustomTools();
var f1 = new Form1() { Tools = tools };
var f2 = new Form2() { Tools = tools };
var f3 = new Form3() { Tools = tools };
...
f1.Show();
f2.Show();
f3.Show();

在每个表单中使用工具

public void inputTextBox_Clicked(object sender, EventArgs e)
{
    var input = (sender as TextBox).Text;
    if( Tools.IsNumeric(input) )
    {
        ...
    }
}

更好的解决方案是使用扩展方法。

答案 3 :(得分:0)

以下是如何实现一个Extension方法,该方法可用于命名空间及其下的所有类:

public class Form1
{

    public void inputTextBox_Changed(object sender, EventArgs e)
    {
        object input=(sender as Control).Text;
        if (sender.IsNumeric())
        {
        }
    }
}

public static class CustomTools
{
    public static bool IsNumeric(this object item)
    {
        if (item==null) return false;
        double result;
        return double.TryParse(item.ToString(), out result);
    }
}