无法从其他.cs文件调用C#函数

时间:2017-12-11 10:59:37

标签: c# asp.net wpf xaml oop

我真的很难将我的函数InlogLeerling()从.cs文件Login.cs调用到MainPage.xaml.cs

我确实尝试了一切,但我已经找到了一些答案,但我不明白我是如何让它在我的项目中运作的。当我调用函数InlogLeerling()时,我收到错误There is no argument given that corresponds to the required formal parameter 'mainpage' of 'Login.InlogLeerling(MainPage)'

以下是我在Login.cs

中使用的代码
namespace VerlofXamarin.Logical_Layer
{
    public class Login
    {
        public string pu_Gebruikersnaam, pu_Wachtwoord, pu_LogLeerling;

        string Gebruikersnaam
        {
            get { return pu_Gebruikersnaam; }
            set { pu_Gebruikersnaam = value; }
        }

        string Wachtwoord
        {
            get { return pu_Wachtwoord; }
            set { pu_Wachtwoord = value; }
        }

        public MainPage mainpage;

        private void InlogLeerling(MainPage mainpage)
        {
            Data_Layer.Verbinding vv = new Data_Layer.Verbinding();

            this.mainpage = mainpage;
            try
            {
                if(string.IsNullOrEmpty(pu_Gebruikersnaam) == true || string.IsNullOrEmpty(pu_Wachtwoord) == true)
                {
                    mainpage.pu_LeerlingLog = "Vul gebruikersnaam en wachtwoord in!";
                    return;
                }

                vv.con.Open();
                MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand("SELECT leerlinggebruikersnaam, leerlingwachtwoord FROM arabignl_project.myfirstmodule$leerlinglogin WHERE (leerlinggebruikersnaam = @gebruiker AND leerlingwachtwoord = @wachtwoord)", vv.con);
                cmd.Parameters.AddWithValue("@gebruiker", pu_Gebruikersnaam.ToString());
                cmd.Parameters.AddWithValue("@wachtwoord", pu_Wachtwoord.ToString());

                MySqlDataReader reader = cmd.ExecuteReader();

                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        mainpage.pu_LeerlingLog = "Inloggen gelukt";
                    }
                }
                else
                {
                    mainpage.pu_LeerlingLog = "Inloggen mislukt";
                }
                reader.Close();
            }
            catch (MySqlException ex)
            {
                mainpage.pu_LeerlingLog = ex.ToString();
            }
            finally
            {
                vv.con.Close();
            }
        }

    }
}

MainPage.xaml.cs

namespace VerlofXamarin
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }

        public Login login;

        public string pu_LeerlingLog
        {
            get { return LoginLog.Text; }
            set { LoginLog.Text = value; }
        }

        public string pu_LeerlingGebruikersnaam
        {
            get { return LeerlingGebruikersnaam.Text; }
        }

        public string pu_LeerlingWachtwoord
        {
            get { return LeerlingWachtwoord.Text; }
        }

        public void LoginKlik(Login login)
        {
            this.login = login;
            login.InlogLeerling();
        }

我已经尝试了很多东西。

3 个答案:

答案 0 :(得分:2)

您的代码中存在两个问题。

  1. 您不能在课堂外打电话给任何私人会员。所以让你的方法公开
  2. 您的方法需要MainPage类型的参数。所以你必须提供它,这正是你的错误所说的:

    public void LoginKlik(Login login)
    {
        this.login = login;
        login.InlogLeerling(this);
    }
    
  3. 除了那些你不应该公开露出一个字段。而是使用您可以在班级中修改的公共财产在课堂外阅读 Login

    public MainPage MainPage { get; private set; }
    

答案 1 :(得分:0)

你应该学习访问修饰符。对于私有,其他类无法访问它。所以你可以将它改为内部或公共。这是参考 - https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/access-modifiers

    internal void InlogLeerling(MainPage mainpage)

答案 2 :(得分:0)

您将无法调用该方法,因为它们不在同一个类中。 当您提供 privte 的访问修饰符时,只能在类中进行访问。 如果您想提供更多访问权限,请访问:

protected - 受保护的成员可在其类和派生类实例中访问。

内部 - 内部类型或成员只能在同一程序集中的文件中访问。(即相同的编译程序)

公开 - 。公共访问是最宽松的访问级别。没有限制

因此,通过使用内部或公共(取决于您需要更大的方面),您将能够在项目的其他类中访问此方法