【问题标题】:How can I create more buttons of the same appearance (C#)如何创建更多相同外观的按钮(C#)
【发布时间】:2014-01-25 17:52:54
【问题描述】:

请您帮我创建更多具有相同外观的按钮。我在一个单独的类中有按钮的图形结构。我在 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;
    }
}

控制按钮的Win表单功能。

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”类中,但在类中它只创建一个按钮。虽然我可以将功能嵌入到windows窗体中,但我想分别拥有图形按钮和功能。你能帮帮我吗?。

控制:

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;

但是如果我注释了这部分代码,那么所有三个按钮都再次没有图形结构。

【问题讨论】:

    标签: c# winforms class button location


    【解决方案1】:

    如果您需要具有相同外观的按钮,则创建继承自 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;
        }
    }
    

    如果您希望按钮表现不同,则将不同的单击事件处理程序分配给不同的按钮。

    【讨论】:

    • 您的解决方案是正确的,但我需要一些不同的解决方案。我创建了一个不执行任何操作但具有图形结构的按钮。然后创建三个额外的按钮,它们已经在做某事,但同样没有图形,只需要让这些按钮做一些从什么都不做的图形按钮克隆的事情。
    • @RadekTarant 抱歉,没听懂。按钮通常没有逻辑——它们只是引发调用处理程序的事件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多