簡體   English   中英

Xamarin 按鈕單擊不起作用

[英]Xamarin button click not working

我正在嘗試像在 Windows 論壇中那樣進行按鈕單擊,但是,我做錯了,因為控制台沒有寫入任何內容,並且按鈕的文本沒有更改。 我為了測試目的更改了按鈕文本。 此外,我知道我連接到 SQL 數據庫的方法不安全,但是此應用程序僅供個人使用,並且目前僅用於學習目的。 無論如何,這是我的代碼:

Main.axml 代碼:

<Button
android:text="Login"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="15"
android:background="@drawable/buttonstyle"
android:id="@+id/buttonLogIn"
android:layout_marginLeft="40dp"
android:layout_marginRight="40dp"
android:drawableLeft="@drawable/lockicon"
android:textStyle="bold"
android:textColor="#FFFFFF" />

MainActivity.cs 代碼:

using System;
using Android.App;
using Android.Widget;
using Android.OS;
using CryptSharp;
using MySql.Data.MySqlClient;
using System.Data;

namespace App1
{
    [Activity(Label = "TexByte", MainLauncher = true, Theme = "@android:style/Theme.Black.NoTitleBar.Fullscreen", Icon = "@drawable/Logo_Mob2")]
    public class MainActivity : Activity
    {
        private EditText mtxtUsername, mtxtPassword;
        private Button mBtnSignIn;

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            SetContentView(Resource.Layout.Main);
            mBtnSignIn = FindViewById<Button>(Resource.Id.buttonLogIn);
            mtxtUsername = FindViewById<EditText>(Resource.Id.txtUsername);
            mtxtPassword = FindViewById<EditText>(Resource.Id.txtPassword);
        }
        private void mBtnSignIn_Click(object sender, EventArgs args)
        {
            MySqlConnection con = new MySqlConnection("Server=127.0.0.1;User Id=root;Password=password;Database=login;");
            try
            {
                string username = mtxtUsername.Text;
                string password = mtxtPassword.Text;

                if (con.State == ConnectionState.Closed)
                {
                    con.Open();
                    MySqlCommand cmd = new MySqlCommand("SELECT * FROM members WHERE username = '" + username + "' order by password ");
                    cmd.CommandType = CommandType.Text;
                    MySqlDataReader rdr = cmd.ExecuteReader();

                    while (rdr.Read())
                    {

                        string hash = string.Format("{0}", rdr["password"]);
                        Console.WriteLine(hash);

                        if (Crypter.CheckPassword(password, hash))
                        {
                            Console.WriteLine("User name and Password Success ");
                            mBtnSignIn.Text = "Test";
                        }
                        else
                        {
                            Console.WriteLine("Unable to process request. Verify username and password are correct.");
                            mBtnSignIn.Text = "Fail";
                        }
                    }
                }
            }
            catch(MySqlException ex)
            {
                Console.WriteLine("ERROR: Something went wrong. :( ", ex.Message);
            }
            finally
            {
                con.Close();
            }
        }
    }
}

您需要將按鈕mBtnSignIn與處理按鈕單擊的事件處理程序mBtnSignIn_Click連接起來。 這不會簡單地發生,通過命名,您必須手動完成。

最簡單的方法是訂閱按鈕的Click事件並將處理程序添加到它:

protected override void OnCreate(Bundle bundle)
{
    // ...

    mBtnSignIn = FindViewById<Button>(Resource.Id.buttonLogIn);
    mBtnSignIn.Click += mBtnSignIn_Click;

    // ...
}

看起來您正在使用 Xamarin.Android,一切都很好,只是您沒有向按鈕添加事件處理程序來處理點擊事件。 它可以通過 3 種簡單的方式完成。

@robinmanuelthiel 在這里提到了一個,另外兩個是:

使用 Lambda 表達式:

mBtnSignIn.Click += (object o, EvenrArgs e) => {
    //Write your Code..
};

使用委托語法:

mBtnSignIn.Click += delegate {
    //Write your Code..
};

在您的情況下,最好將事件處理程序添加到您的按鈕。 您可以在此處找到更多幫助和代碼示例https://developer.xamarin.com/

謝謝

我有一個類似的問題,在按鈕上沒有調用Clicked回調。

盡管這很愚蠢 - 我花了幾個小時才弄清楚 - 問題是我在其中一個父控件上設置了InputTransparent="True" -_-

暫無
暫無

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

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