簡體   English   中英

無法從其他.cs文件調用C#函數

[英]Can't call C# function from other .cs file

我真的InlogLeerling()從.cs文件Login.csMainPage.xaml.cs調用函數InlogLeerling()

我確實做了所有嘗試,但已經找到了一些答案,但是我不明白如何在項目中使用它。 當我調用函數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();
        }

我已經嘗試了很多東西。

您的代碼中有兩個問題。

  1. 您不能在課堂外給任何私人成員打電話。 因此,將您的方法公開
  2. 您的方法需要一個MainPage類型的參數。 因此,您必須提供它,這正是錯誤所指出的內容:

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

除了那些之外,您不應該公開露面。 而是使用一個公共屬性,你可以你的類中修改類的外部閱讀 Login

public MainPage MainPage { get; private set; }

您應該學習訪問修飾符。 如果使用private,其他類將無法訪問它。 因此,您可以將其更改為內部或公共。 這是參考-https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/access-modifiers

    internal void InlogLeerling(MainPage mainpage)

您將無法調用該方法,因為它們不在同一類中。 當您將訪問修飾符賦予privte時 ,只能在該類中進行訪問。 如果您想授予更多訪問權限,請執行以下操作:

protected-受保護的成員可以在其類內以及派生類實例進行訪問。

內部 -內部類型或成員只能在同一程序集中的文件(即,相同的已編譯程序)中訪問。

公共 -。 公共訪問是最寬松的訪問級別。 沒有限制

為此,通過使用內部或公共(取決於更大方面的需求),您將能夠在項目的其他類中訪問此方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM