2012-04-18 4 views
1

У меня есть программа, в которой пользователь вводит имя пользователя и дату, а затем нажимает кнопку, которая вводит данные в базу данных.Невозможно вызвать метод из другого класса

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу передать данные даты в текстовом поле в качестве аргумента в методе для моего класса BOL. Я получаю следующее сообщение об ошибке: «„P90XPRogramt.ProgramLoginBOL.TestParsing (строка)“пользователя не может получить доступ с помощью ссылки экземпляра, квалифицировать его с именем типа вместо»

Вот код из моего слоя пользовательского интерфейса:

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 вместо строки. Как я уже сказал, я не понимаю, что он хочет от меня.

ответ

1

Статические методы нельзя вызывать с экземплярами класса точно так же, как указано в сообщении об ошибке.

P90XPRogramt.ProgramLoginBOL.TestParsing(txtStartDate.Text); 

Для будущих ошибок попробуйте выполнить поиск кода ошибки первого - обычно MSDN статья содержит объяснение и образец, как в этом случае CS0176

+0

Я не знал, что MSDN имел код ошибки объяснения. Я сделаю это в будущем. Спасибо вам за помощь. –

4

метод вы пытаетесь назвать это static -метода и не является экземпляр -метод.

Метод TestParsing должен быть вызван на classProgramLoginBOL, а не на конкретном случае, как это:

ProgramLoginBOL.TestParsing(txtStartDate.Text); 

Статические методы используются, когда никакие конкретные атрибуты экземпляра не требуется.

+0

Благодарим за помощь. Я внесу соответствующие изменения –

4

Он хочет, чтобы вы изменить:

busObject.TestParsing(txtStartDate.Text); 

к:

ProgramLoginBOL.TestParsing(txtStartDate.Text); 

TestParsing Поскольку статический метод ProgramLoginBOL класса, и не связан с конкретным экземпляром.

+0

Благодарим за помощь. Я внесу соответствующие изменения –

1

Ваш метод статичен, вы не можете использовать экземпляр этого класса для его вызова. Как это

ProgramLoginBOL.TestParsing("text to pass"); 
+0

Благодарим за помощь. –

1

Вы можете вызывать статические методы с именем класса, а объект класса поэтому попробуйте

ProgramLoginBOL.TestParsing(txtStartDate.Text); 
+0

Благодарим за помощь. –

Смежные вопросы