处理一系列按钮

时间:2014-10-08 20:31:54

标签: c# button

我正在创建一个播放旋律的简单游戏,并且应该突出显示与音符对应的按钮。

然后用户按下按钮,在每次点击期间,按钮将再次突出显示。我想以图形方式将所有按钮放在GUI中。

  1. 我可以在GUI中的按钮中添加highLight方法吗?我知道我可能会创建一个新类,它可以从某个按钮类中删除并在代码中创建按钮,但我更愿意以图形方式进行。

  2. 处理按钮输出的最佳方法是什么?我知道我可以粘贴每个按钮的代码,如

    private void button_withIndexA(object sender, EventArgs e)
    {
        checkIfThisNoteWasCorrect();
        highLightThisButton();
        setHighLightOffForAllOtherButtons(); 
    }
    
  3. 但是,我认为收集某种容器类中的所有按钮并制作类似

    的函数会更简洁。
    class buttonArrayHandler
    {
        /*constructors etc*/
    
        private void someButtonWasClicked(object sender)
        {
        /*Check which button was clicked, and do stuff accordingly*/
    
        }
    }
    

    但我不知道该怎么做。建议?

2 个答案:

答案 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;