无法从另一个类调用方法

时间:2012-04-18 18:15:54

标签: c# datetime methods argument-passing

我有一个程序,用户输入用户名和日期,然后单击一个将数据输入数据库的按钮。

我遇到的问题是我似乎无法将文本框日期数据作为方法中的参数传递给我的BOL类。我收到以下错误:“成员'P90XPRogramt.ProgramLoginBOL.TestParsing(字符串)'无法使用实例引用访问;请使用类型名称限定它”

以下是我的UI图层中的代码:

public partial class ProgramLoginForm : Form
{
    private ProgramLoginBOL busObject =
        new ProgramLoginBOL();       

    //default constructor
    public ProgramLoginForm(string dayNo)
    {
        InitializeComponent();
        busObject.InitializeConnection();
    } 

    private void btnBeginProgram_Click(object sender, EventArgs e)
    {
        busObject.UserName = txtEnterName.Text;            

        busObject.TestParsing(txtStartDate.Text);            

    }

    //event handler to close program
    private void btnExitProgram_Click(object sender, EventArgs e)
    {
        Application.Exit();
    }        
}

以下是我的BOL类的代码:

class ProgramLoginBOL
{
    //declare variables
    string userName = "";

    //instantiate a connecttion object to Access database
    OleDbConnection aConnection =
        new OleDbConnection(
            "Provider=Microsoft.ACE.OLEDB.12.0;" +
            "Data Source=P90XDatabase.accdb;");

    public ProgramLoginBOL()
    {
    }

    //property for userName variable
    public string UserName
    {
        get { return userName; }
        set { userName = value; }
    }

    public static DateTime TestParsing(string datetext)
    {
        DateTime dt;

        if (DateTime.TryParseExact(datetext, "d", null, 0, out dt))
        {
            Console.WriteLine("Parsed to {0}", dt);
        }
        else
        {
            Console.WriteLine("Bad date");
        }
        return dt;
    }

    public void InitializeConnection()
    {
        ProgramLoginDAL.InitializeConnection(aConnection);
    }
}

我不确定它告诉我要做什么。按类型名称我假设它们是指数据类型,所以我尝试了以下内容:

string busObject.TestParsing(txtStartDate.Text);

string.busObject.TestParsing(txtStartDate.Text);

string.TestParsing(txtStartDate.Text);

busObject.TestParsing(string txtStartDate.Text);

这些都没有奏效。我也尝试使用DateTime而不是字符串。正如我所说,我不知道它希望我做什么。

5 个答案:

答案 0 :(得分:4)

您尝试调用的方法是static - 方法,而不是实例方法。

应该在class ProgramLoginBOL上调用方法TestParsing,而不是在具体实例上调用,如下所示:

ProgramLoginBOL.TestParsing(txtStartDate.Text);

当不需要实例的特定属性时,使用静态方法。

答案 1 :(得分:4)

它希望你改变:

busObject.TestParsing(txtStartDate.Text);

为:

ProgramLoginBOL.TestParsing(txtStartDate.Text);

由于TestParsingProgramLoginBOL类的静态方法,并且与特定实例无关。

答案 2 :(得分:1)

无法使用类的实例调用静态方法,就像错误消息所说的那样。

P90XPRogramt.ProgramLoginBOL.TestParsing(txtStartDate.Text);

对于将来的错误,请先尝试搜索错误代码 - 通常MSDN文章包含说明和示例,例如CS0176

答案 3 :(得分:1)

您的方法是静态的,您不能使用该类的实例来调用它。这样做

ProgramLoginBOL.TestParsing("text to pass");

答案 4 :(得分:1)

您可以使用类名而不是类对象调用静态方法 所以试试

ProgramLoginBOL.TestParsing(txtStartDate.Text);