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语句等不必要的代码。它们不影响功能,但可能会妨碍后期代码维护。
我正在尝试制作一个包含三个按钮的菜单(按顺序:播放、选项、退出),其中只有选定的按钮有边框,并且由向上和向下箭头控制。不幸的是,按下 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语句等不必要的代码。它们不影响功能,但可能会妨碍后期代码维护。