我正在创建一个播放旋律的简单游戏,并且应该突出显示与音符对应的按钮。
然后用户按下按钮,在每次点击期间,按钮将再次突出显示。我想以图形方式将所有按钮放在GUI中。
我可以在GUI中的按钮中添加highLight方法吗?我知道我可能会创建一个新类,它可以从某个按钮类中删除并在代码中创建按钮,但我更愿意以图形方式进行。
处理按钮输出的最佳方法是什么?我知道我可以粘贴每个按钮的代码,如
private void button_withIndexA(object sender, EventArgs e)
{
checkIfThisNoteWasCorrect();
highLightThisButton();
setHighLightOffForAllOtherButtons();
}
但是,我认为收集某种容器类中的所有按钮并制作类似
的函数会更简洁。class buttonArrayHandler
{
/*constructors etc*/
private void someButtonWasClicked(object sender)
{
/*Check which button was clicked, and do stuff accordingly*/
}
}
但我不知道该怎么做。建议?
答案 0 :(得分:1)
您可以更改按钮颜色以创建高光效果,但如果是游戏,您可以使用图像/图形作为按钮,并在点击时将它们交换到另一个图形。
当您双击按钮/图形/控件时,默认情况下会创建一个方法并将其链接到您的单击操作。而是点击每个控件,然后点击小闪电图标,在点击操作下,为所有控件选择相同的方法。
然后在您的方法中强制转换对象发送者以获取原始控件,例如:
var clickedButton = (Button)sender;
其中(按钮)可以是(图形)或您用作按钮的任何类型的控件。
编辑:
如果您需要访问一组控件,您可以在表单顶部保留一个全局名称列表并循环显示它们:
public List<string> buttonList = new List<string>() { "button1", "button2" };
void SomeMethod()
{
foreach (var controlName in buttonList)
{
this.Controls[controlName].Text = "TEST";
}
}
或使用固定名称和数字范围:
void SomeMethod()
{
for (int i = 1; i <= 2; i++)
{
this.Controls["button" + i].Text = "TEST";
}
}
答案 1 :(得分:0)
我建议以编程方式添加按钮,就像我提到的Carlos487一样,这是我制作的代码段,可以为您带来优势:
public Form1()
{
InitializeComponent();
int topMod = 0;
for (int i = 0; i < 5; i++)
{
MakeButton(i,topMod);
topMod += 20;
}
}
public void MakeButton(int index, int margin)
{
Button currentButton = new Button();
currentButton.Text = "Note" + index;
currentButton.Top += margin;
currentButton.Click += OnButtonClick;
panel1.Controls.Add(currentButton);
}
public void OnButtonClick(object sender, EventArgs e)
{
//checkIfThisNoteWasCorrect();
//highLightThisButton();
//setHighLightOffForAllOtherButtons();
MessageBox.Show("My Action was activated!");
}
正如您所看到的,您可以像在此处一样将公共函数放在OnButtonClick方法中,为所有按钮提供相同的事件序列。如果您不想完成编程按钮的整个过程,那么您也可以这样做:
currentButton.Click += OnButtonClick;