簡體   English   中英

C#KeyDown問題

[英]C# KeyDown Issue

我正在嘗試制作一個帶有三個按鈕的菜單(依次為:播放,選項,退出),其中只有選定的按鈕帶有邊框,並由向上和向下箭頭控制。 不幸的是,當按下atm按鈕時似乎什么也沒發生。 這是代碼:

public partial class
{
    int i = 0;
    List<Button> menuButtons = new List<Button>();
    Button selectedButton = new Button();

    public Menu()
    {
        InitializeComponent();

        menuButtons.Add(btnPlay);
        menuButtons.Add(btnOptions);
        menuButtons.Add(btnExit);

        selectedButton = menuButtons[i];

        if (menuButtons[i] == selectedButton)
        {
            menuButtons[i].FlatAppearance.BorderSize = 1;
        }
    }

    private void Menu_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Down)
        {
            if (i < menuButtons.Count)
            {
                i++;
            }
            else if (i >= menuButtons.Count)
            {
                i = 0;
            }
        }

        if (e.KeyCode == Keys.Up)
        {
            if (i > 0)
            {
                i--;
            }
            else if (i <= 0)
            {
                i = menuButtons.Count;
            }
        }

        if (e.KeyCode == Keys.Enter)
        {
            switch (i)
            {
                case 0:
                    btnPlay.PerformClick();
                    break;
                case 1:
                    btnOptions.PerformClick();
                    break;
                case 2:
                    btnExit.PerformClick();
                    break;
            }
        }
    }

祝你今天愉快 :)

您的代碼中有兩個問題。 第一個在前兩個if語句中。 您正在正確地更改索引,但沒有將邊框設置為新的選定按鈕。 您必須刪除先前選擇的按鈕的邊框並設置新選擇的按鈕的邊框。

第二個原因是您忘記為按鈕設置點擊事件,因此單擊它們不會執行任何操作。 您的代碼應如下所示:

public partial class
{
    int i = 0;
    List<Button> menuButtons = new List<Button>();
    Button selectedButton = new Button();

    public Menu()
    {
        InitializeComponent();

        //Assigning click events for the buttons.
        btnPlay.Click += BtnPlay_Click;
        btnOptions.Click += BtnOptions_Click;
        btnExit.Click += BtnExit_Click;

        menuButtons.Add(btnPlay);
        menuButtons.Add(btnOptions);
        menuButtons.Add(btnExit);

        selectedButton = menuButtons[i];

        if (menuButtons[i] == selectedButton)
        {
            menuButtons[i].FlatAppearance.BorderSize = 1;
        }
    }

    private void Menu_KeyDown(object sender, KeyEventArgs e)
    {
        //Removing border from previously selected button.
        menuButtons[i].FlatAppearance.BorderSize = 0; 

        if (e.KeyCode == Keys.Down)
        {
            if (i < menuButtons.Count)
            {
                i++;
            }
            else if (i >= menuButtons.Count)
            {
                i = 0;
            }
        }

        if (e.KeyCode == Keys.Up)
        {
            if (i > 0)
            {
                i--;
            }
            else if (i <= 0)
            {
                i = menuButtons.Count;
            }
        }

        //Setting border for the newly selected button.
        menuButtons[i].FlatAppearance.BorderSize = 1;

        if (e.KeyCode == Keys.Enter)
        {
            switch (i)
            {
                case 0:
                    btnPlay.PerformClick();
                    break;
                case 1:
                    btnOptions.PerformClick();
                    break;
                case 2:
                    btnExit.PerformClick();
                    break;
            }
        }
    }

    private void BtnExit_Click(object sender, EventArgs e)
    {
        //Code for the Exit button.
    }

    private void BtnOptions_Click(object sender, EventArgs e)
    {
        //Code for the Options button.
    }

    private void BtnPlay_Click(object sender, EventArgs e)
    {
        //Code for the Play button.
    }
}

PS:請注意不必要的代碼,例如selectedButton變量和構造函數中的if語句。 它們不會影響功能,但可能會妨礙以后的代碼維護。

暫無
暫無

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

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