【问题标题】:Delete seleted button generated dynamically删除动态生成的选定按钮
【发布时间】:2016-02-17 21:08:49
【问题描述】:

我用 C# 开发了一个 winform 应用程序。我想在按钮单击时动态生成按钮,我们将其命名为“添加”。随机单击任何按钮,然后单击删除按钮,应删除所选按钮。现在我该怎么做?

这是我的动态按钮生成代码


public void AddNewButton()
{
    System.Windows.Forms.Button();
    Btn = new Button();
    this.Controls.Add(Btn);
    Btn.Name = textBox_code.Text + count;
    Btn.Location = new Point(50, 50);
    Btn.Text = textBox_code.Text;
    Btn.BackColor = Color.Red;
    Btn.ForeColor = Color.Blue;
    Btn.Click += new EventHandler(this.button_Click);
    count = count + 1;
    label1.Text = count.ToString();
    Btn.MouseDown += new MouseEventHandler(textbox_MouseDown);
    Btn.MouseMove += new MouseEventHandler(textbox_MouseMove);
    Btn.MouseUp += new MouseEventHandler(textbox_MouseUp);
}

用于删除按钮

private void button_delete_Click(object sender, EventArgs e)
{
    this.Controls.Remove(Btn);
    count = count - 1;
    label1.Text = count.ToString();
}

上面的代码只删除最后添加的按钮,而不是任何随机选择的按钮

【问题讨论】:

  • 再解释一下。当你点击删除按钮时,应该删除哪个按钮?
  • 您应该向 Btn.MouseClick 添加一个处理程序并将最后单击的按钮保存在一个变量中。然后你知道哪个Button被点击了,可以在button_delete_Click中删除它
  • 坦率地说我不知道​​你的动态按钮生成代码是如何编译的
  • OP 可能在System.Windows.Forms.Button(); 上犯了一个错误,我想我们可以假设它应该是System.Windows.Forms.Button Btn;

标签: c# .net winforms dynamic-controls


【解决方案1】:

添加一个变量来保存最后点击的按钮(在类级别)

Button lastClicked = null;
private void button_Click(object sender, EventArgs args) 
{
    ...
}

在你的button_Click 中添加这个,

private void button_Click(object sender, EventArgs args) 
{
    // whatever you already have...

    lastClicked = (Button)sender;
}

然后在您的删除按钮处理程序中,

private void button_delete_Click(object sender, EventArgs e)
{
    // delete the last clicked button
    this.Controls.Remove(lastClicked);
    count = count - 1;
    label1.Text = count.ToString();
}

【讨论】:

    【解决方案2】:

    您没有解释如何选择要删除的按钮,而是使用按钮名称作为一般答案,而不是

    this.Controls.Remove(Btn);
    

    怎么样

    foreach (Control c in this.Controls)
    {
         if (c.Name == "Name of button to delete")
         {
               this.Controls.Remove(c);
               break;
         }
    }
    

    编辑

    好的,你确实解释了这个过程。然后一种方法是有一个变量来存储最后点击的按钮:

    Button btnLastClicked;
    

    然后在 button_Click 事件处理程序中,执行以下操作:

    btnLastClicked=sender as Button;
    

    最后,

    private void button_delete_Click(object sender, EventArgs e)
    {
        this.Controls.Remove(btnLastClicked);
        count = count - 1;
        label1.Text = count.ToString();
    }
    

    【讨论】:

    • 他解释说:随机点击任何按钮,然后点击删除按钮,选择的按钮应该被删除
    • 好吧好吧,你是对的,我没有仔细看,你可以停止那些-1 :)
    • SO 到处都是野蛮人。
    • 删除了反对票。 @mike 和 Pikoh 的答案没有正确解决问题,否决它是错误的吗?
    • 你很高兴 Nidzz :)。如果可行,您应该接受一个答案,迈克的或我的。
    猜你喜欢
    • 1970-01-01
    • 2019-06-02
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 2013-01-02
    • 2011-05-13
    • 2021-04-27
    相关资源
    最近更新 更多