1

我的 C# winform 项目有问题。
在我的项目中,我有在运行时创建一个新按钮的功能。因为有时我制作了太多按钮,所以我想编写一个函数来删除我想在运行时删除的按钮。有人可能已经有了这个功能?

private void button2_Click(object sender, EventArgs e)
{
        Button myText = new Button();
        myText.Tag = counter;
        myText.Location = new Point(x2,y2);
        myText.Text = Convert.ToString(textBox3.Text);
        this.Controls.Add(myText);
}

这就是我在运行时制作按钮的方式。

4

3 回答 3

3

为了删除您添加的最后一个按钮,您可以使用以下内容:

//a list where you save all the buttons created
List<Button> buttonsAdded = new List<Button>();

private void button2_Click(object sender, EventArgs e)
{
    Button myText = new Button();
    myText.Tag = counter;
    myText.Location = new Point(x2,y2);
    myText.Text = Convert.ToString(textBox3.Text);
    this.Controls.Add(myText);
    //add reference of the button to the list
    buttonsAdded.Insert(0, myText);

}

//atach this to a button removing the other buttons
private void removingButton_Click(object sender, EventArgs e)
{
    if (buttonsAdded.Count > 0)
    {
        Button buttonToRemove = buttonsAdded[0];
        buttonsAdded.Remove(buttonToRemove);
        this.Controls.Remove(buttonToRemove);
    }
}

这应该允许您通过始终删除现有按钮中添加的最后一个按钮来删除任意数量的按钮。

更新

如果您希望能够将鼠标光标悬停在按钮上,然后使用Delete键将其删除,则可以使用以下解决方案:

  • 设置KeyPreviewtrue,因此Form可以接收在其控件中发生的关键事件
  • 添加buttonsAdded列表并button2_Click按照此答案中描述的第一个解决方案进行修改

  • 为您创建KeyDown事件处理程序Form并添加此代码:

    private void MySampleForm_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Delete)
        {
            //get control hovered with mouse
            Button buttonToRemove = (this.GetChildAtPoint(this.PointToClient(Cursor.Position)) as Button);
            //if it's a Button, remove it from the form
            if (buttonsAdded.Contains(buttonToRemove))
                {
                    buttonsAdded.Remove(buttonToRemove);
    
                    this.Controls.Remove(buttonToRemove);
                }
        }
    }
    
于 2012-04-21T19:35:45.370 回答
2

你应该可以使用 this.Controls.Remove(myText);

于 2012-04-21T19:20:24.580 回答
1
public Button myText ; // keep public button to assign your new Button 

private void buttonAdd_Click(object sender, EventArgs e)
{
        myText = new Button();
        myText.Tag = counter;
        myText.Location = new Point(x2,y2);
        myText.Text = Convert.ToString(textBox3.Text);
        this.Controls.Add(myText);
}

private void buttonRemove_Click(object sender, EventArgs e)
{
      if(Button != null && this.Controls.Contains(myText))
      {
           this.Controls.Remove(myText);
           myText.Dispose();
      )
}

如果您想在删除按键时删除,您可以使用如下按键事件

private void Window_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Delete)
    {
          if(Button != null && this.Controls.Contains(myText))
          {
               this.Controls.Remove(myText);
               myText.Dispose();
          )
    }
}
于 2012-04-21T19:31:37.367 回答