更改以编程方式创建的按钮的属性
Change properties of programmatically created buttons
我通过以下方式在我的应用程序中创建按钮:
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);
然后我有一个方法可以在单击任何按钮时使用。
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());
}
}
如何更改实际按钮中的数据(然后单击该按钮)?我特别想更改背景图像。我怎么能这样做? (我还需要更改代码创建的其他一些按钮的背景图像。)
您正在处理您创建的每个按钮的 Click
事件 - 而 Any_Button_Click
中的 sender
实际上是 按钮被点击了.
所以只需将 b.BackgroundImage
更改为您需要的任何内容即可。
发件人对象是按钮:
Button b = (Button)sender;
...所以您应该能够直接更改其属性:
b.WhateverPropsToChange = yourSetting;
PS:我认为这不是必需的,但如果按钮没有直接更新,您可以尝试使用 b.Refresh()
让它知道发生了一些变化。
我通过以下方式在我的应用程序中创建按钮:
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);
然后我有一个方法可以在单击任何按钮时使用。
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());
}
}
如何更改实际按钮中的数据(然后单击该按钮)?我特别想更改背景图像。我怎么能这样做? (我还需要更改代码创建的其他一些按钮的背景图像。)
您正在处理您创建的每个按钮的 Click
事件 - 而 Any_Button_Click
中的 sender
实际上是 按钮被点击了.
所以只需将 b.BackgroundImage
更改为您需要的任何内容即可。
发件人对象是按钮:
Button b = (Button)sender;
...所以您应该能够直接更改其属性:
b.WhateverPropsToChange = yourSetting;
PS:我认为这不是必需的,但如果按钮没有直接更新,您可以尝试使用 b.Refresh()
让它知道发生了一些变化。