![](/img/trans.png)
[英]How do I create buttons dynamically in C# onClick of another button? And then have those buttons also do the same
[英]How can I create more buttons of the same appearance (C#)
拜托,您能幫我怎樣創建更多外觀相同的按鈕。 我在單獨的類中具有按鈕的圖形結構。 用於在Windows窗體中創建按鈕的功能。
步驟1)圖形按鈕結構的類:
class GraphicClassStructure : GraphicPosition
{
public Button resetTree = new Button();
public void CreateClassButtons()
{
// Reset tree
resetTree.BackColor = Color.Transparent;
resetTree.BackgroundImage = BuildResource.reset;
resetTree.BackgroundImageLayout = ImageLayout.Stretch;
resetTree.FlatAppearance.BorderSize = 0;
resetTree.FlatAppearance.MouseDownBackColor = Color.Transparent;
resetTree.FlatAppearance.MouseOverBackColor = Color.Transparent;
resetTree.FlatStyle = FlatStyle.Flat;
resetTree.Name = "resetTree";
resetTree.Size = Size[0][5];
resetTree.UseVisualStyleBackColor = false;
}
}
贏窗體功能的控制按鈕。
private void classMenu_Click(object sender, EventArgs e)
{
classStructure.ClassAllButtonsVisible();
classStructure.CreateClassButtons();
this.Controls.Add(classStructure.classBackround);
for (int i = 0; i < 3; i++)
{
switch (i)
{
case 0:
classStructure.resetTree.Location = classStructure.Location[0][2];
break;
case 1:
classStructure.resetTree.Location = classStructure.Location[0][3];
break;
case 2:
classStructure.resetTree.Location = classStructure.Location[0][4];
break;
}
classStructure.resetTree.Click += new EventHandler(resetTreeOneEvent_Click);
classStructure.resetTree.MouseEnter += new EventHandler(resetTree_MouseEnter);
classStructure.resetTree.MouseLeave += new EventHandler(resetTree_MouseLeave);
classStructure.resetTree.Tag = i;
this.Controls.Add(classStructure.resetTree);
}
}
當前的問題是按鈕的創建在“ GraphicStructure”類中,但是在類中它僅創建一個按鈕。 雖然我可以將窗口形式嵌入到該功能中,但是我想分別具有圖形按鈕和功能。 你能幫我嗎?。
控制:
private void resetTreeOneEvent_Click(object sender, EventArgs e)
{
Button button = sender as Button;
if (button != null)
{
switch ((int)button.Tag)
{
case 0:
// First Button Clicked
break;
case 1:
// Second Button Clicked
break;
case 2:
// Third Button Clicked
break;
}
}
}
還是第二個想法。 我創建了一個不執行任何操作但具有圖形結構的按鈕。 然后創建三個已經在做某事但又沒有圖形的按鈕,只需要讓這些按鈕執行從圖形按鈕克隆的操作即可。
我嘗試使用它,但是我仍然只看到一個按鈕:
private void classMenu_Click(object sender, EventArgs e)
{
classStructure.ClassAllButtonsVisible();
classStructure.CreateClassButtons();
this.Controls.Add(classStructure.classBackround);
for (int i = 0; i < 3; i++)
{
Button button = new Button();
button = classStructure.resetTree;
switch (i)
{
case 0:
button.Location = classStructure.Location[0][2];
break;
case 1:
button.Location = classStructure.Location[0][3];
break;
case 2:
button.Location = classStructure.Location[0][4];
break;
}
button.Click += new EventHandler(resetTreeOneEvent_Click);
button.MouseEnter += new EventHandler(resetTree_MouseEnter);
button.MouseLeave += new EventHandler(resetTree_MouseLeave);
button.Tag = i;
this.Controls.Add(button);
}
}
第二個想法的工作(我看到了三個按鈕),如果我對此進行了評論:
button = classStructure.resetTree;
但是,如果我注釋了此零件代碼,則所有三個按鈕再次都沒有圖形結構。
如果您需要外觀相同的按鈕,請創建繼承自Button
自定義按鈕,並使用它代替標准Button
:
public class TreeButton : Button
{
public TreeButton()
{
BackColor = Color.Transparent;
BackgroundImage = /* set some image */
BackgroundImageLayout = ImageLayout.Stretch;
FlatAppearance.BorderSize = 0;
FlatAppearance.MouseDownBackColor = Color.Transparent;
FlatAppearance.MouseOverBackColor = Color.Transparent;
FlatStyle = FlatStyle.Flat;
Size = /* set size */
UseVisualStyleBackColor = false;
}
}
如果希望按鈕的行為不同,則將不同的click事件處理程序分配給不同的按鈕。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.