Change properties of programmatically created butt

2019-09-04 03:39发布

I create buttons in my application by:

List<Button> btnslist = new List<Button>();

for (int i = 0; i < nbrofbtns; i++)
{
   Button newButton = new Button();
   btnslist.Add(newButton);
   this.Controls.Add(newButton);

   newButton.Width = btnsidelength;       
   newButton.Height = btnsidelength;
   newButton.Top = btnsidelength 
                   * Convert.ToInt32(Math.Floor(Convert.ToDouble(i / Form2.puzzlesize)));
   newButton.Left = btnsidelength 
                    * Convert.ToInt32(
                            Math.Floor(Convert.ToDouble(i)) 
                            - Math.Floor((Convert.ToDouble(i)) 
                            / (Form2.puzzlesize)) * (Form2.puzzlesize));

   newButton.BackgroundImage = Lights_out_.Properties.Resources.LightsOutBlack;
   newButton.Tag = (i+1).ToString();

   newButton.Click += new EventHandler(Any_Button_Click);

Then I have a method for when any of the buttons are clicked.

void Any_Button_Click(object sender, EventArgs e)
{
    //the variable b has all the insformation that the single button had itself.
    Button b = (Button)sender;
    if (b.BackgroundImage == Lights_out_.Properties.Resources.LightsOutBlack)
    {
        MessageBox.Show(b.Tag.ToString());
        MessageBox.Show(btnslist[Convert.ToInt32(b.Tag)].BackgroundImage.ToString());
        btnslist[Convert.ToInt32(b.Tag)].BackgroundImage = 
                Lights_out_.Properties.Resources.LightsOutWhite;
        MessageBox.Show(btnslist[Convert.ToInt32(b.Tag)].BackgroundImage.ToString());
    }
    else
    {
        MessageBox.Show("b.backgroundimage != lightsoutblack. Backgroundimage = " 
                        + b.BackgroundImage.ToString());
    }
}

How do I change the data in the actual button (then said button is clicked)? I want specificly to change the backgroundimage. How could I do this?? (I also need to change the backgroundimage of some other buttons created by the code.)

2条回答
小情绪 Triste *
2楼-- · 2019-09-04 03:50

The sender object is the button:

Button b = (Button)sender;

... so you should be able to change properties on it directly:

b.WhateverPropsToChange = yourSetting;

PS: I don't think this is necessary, but if the button is not updated directly, you might try to using b.Refresh() to let it know something has changed.

查看更多
做个烂人
3楼-- · 2019-09-04 04:08

You're handling Click event of every button you've created - and sender in Any_Button_Click is actually the button was clicked.

So just change b.BackgroundImage to whatever you need.

查看更多
登录 后发表回答