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キーでボタンを削除できるようにする場合は、次のソリューションを使用できます。

  • trueに設定KeyPreviewすると、コントロールで発生した重要なイベントを受信できます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 に答える