【问题标题】:C# KeyDown IssueC# KeyDown 问题
【发布时间】:2018-12-24 21:04:41
【问题描述】:

我正在尝试制作一个包含三个按钮的菜单(按顺序:播放、选项、退出),其中只有选定的按钮有一个边框,并且由向上和向下箭头控制。不幸的是,当按下 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;
            }
        }
    }

祝你有美好的一天:)

【问题讨论】:

  • 您似乎没有为按钮分配点击事件?

标签: c# winforms events keydown


【解决方案1】:

您的代码中有两个问题。第一个在前两个 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 语句。它们不会影响功能,但可能会妨碍以后的代码维护。

【讨论】:

    猜你喜欢
    • 2016-01-18
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多